0

我正在构建一个应用程序,它将执行以下操作:

  1. 将 XML 发布到 HTTP 地址
  2. 获取响应并将其存储在远程 mssql db 上的表中
  3. 再次发布 XML 并将响应与之前存储在数据库中的内容进行比较
  4. 寻找某些差异,当它们存在时,将 XML 发布到 HTTP 地址
  5. 获取新的响应,并根据需要对其进行解析,将结果发送到另一个 mssql 表。

HTTP 服务器使用摘要身份验证,我在 python 中工作时遇到了各种麻烦。这是我第一次涉足 python,我正在学习各种各样的东西......但我似乎无法理解这一点。有没有人有python中摘要认证的任何真正好的例子?我想让这件事继续下去,并尝试自己完成其余的工作。理想情况下,我想使用 cookie 来保持会话打开。

谢谢!

编辑

这是我到目前为止所拥有的,以及它输出的内容:

url = "https://url.here.com/xml"
xml = '''<request method=\"switchvox.currentCalls.getList\"><parameters></parameters></request>'''
user = "user"
secret = "secret"
realm = "switchvox_api_auth"

passwdmngr = urllib2.HTTPPasswordMgrWithDefaultRealm()
passwdmngr.add_password(realm,url,user,secret)
authhandler = urllib2.HTTPDigestAuthHandler(passwdmngr)
opener = urllib2.build_opener(authhandler)

urllib2.install_opener(opener)

req = urllib2.Request(url)
req.add_header('Content-Type', 'application/xml')
res = urllib2.urlopen(req, xml)

print res.read

这是我回来的:

<bound method _fileobject.read of <socket._fileobject object at 0xb75c741c>>

我改变什么似乎并不重要,这就是我能摆脱的一切。我目前正在使用 lxml 重新处理 xml;一旦我完成了,我会再次检查并报告。

编辑

改为使用 lxml,最后正确打印..

import urllib2
from lxml import etree

#defining xml request for current calls:
#       <request method="switchvox.currentCalls.getList">
#               <parameters>
#               </parameters>
#       </request>

request = etree.Element("request")
parameters = etree.SubElement(request, "parameters")

xml = etree.tostring(request, pretty_print=True)
url = "https://url.here.com/xml"
user = "user"
secret = "secret"
realm = "switchvox_api_auth"

passwdmngr = urllib2.HTTPPasswordMgrWithDefaultRealm()
passwdmngr.add_password(realm,url,user,secret)
authhandler = urllib2.HTTPDigestAuthHandler(passwdmngr)
opener = urllib2.build_opener(authhandler)

urllib2.install_opener(opener)

req = urllib2.Request(url)
req.add_header('Content-Type', 'application/xml')
res = urllib2.urlopen(req, xml)

response = res.read()
print response
4

0 回答 0