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

时间:2011-06-30 19:03:02

标签: python http authentication cookies digest

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

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

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

0 个答案:

没有答案