如何在python中使用digest auth发布XML?

2024-10-01 17:21:21 发布

您现在位置:Python中文网/ 问答频道 /正文

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

  1. post XML to an HTTP address
  2. take the response and store it in a table on a remote mssql db
  3. post the XML again and compare the response to what was previously stored in the database
  4. look for certain differences, and when they are present, post XML to an HTTP address
  5. take the new response, and parse it as needed, sending the results to another mssql table.

HTTP服务器使用摘要式身份验证,我在使用python时遇到了各种各样的困难。这是我第一次进入python,我正在学习各种各样的东西…但我似乎不明白。有没有人在python中有真正好的摘要式身份验证示例?我想把这件事做下去,并试着自己完成剩下的工作。理想情况下,我希望使用cookies来保持会话打开。在

谢谢!在

edit

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

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

我得到的是:

^{pr2}$

我改变什么似乎无关紧要,我能从中得到的就是这些。我目前正在用lxml重新处理xml;一旦完成,我将再次检查并报告。在

edit

改为使用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

Tags: andthetourlsecretresponserequestxml

热门问题