0

私は次のことを行うアプリケーションを構築しています:

  1. XMLをHTTPアドレスに投稿する
  2. 応答を受け取り、リモートのmssqlデータベースのテーブルに保存します
  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>>

私が何を変えるかは問題ではないようです、それは私がそれから抜け出すことができるすべてです。私は現在、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
4

0 に答える 0