我正在构建一个将执行以下操作的应用程序:
- 将XML发布到HTTP地址
- 获取响应并将其存储在远程mssql db
上的表中- 再次发布XML并将响应与之前存储在数据库中的内容进行比较
- 寻找某些差异,当它们存在时,将XML发布到HTTP地址
- 获取新响应,并根据需要解析它,将结果发送到另一个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