私は次のことを行うアプリケーションを構築しています:
- XMLをHTTPアドレスに投稿する
- 応答を受け取り、リモートのmssqlデータベースのテーブルに保存します
- 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>>
私が何を変えるかは問題ではないようです、それは私がそれから抜け出すことができるすべてです。私は現在、xmlをlxmlで作り直しています。それが終わったら、もう一度確認して報告します。
編集
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