6

Python で SOAP を操作するためのライブラリを教えてください。
今、私は "suds" を使用しようとしていますが、サーバーの応答から http ヘッダーを取得する方法を理解できません
コード例:

from suds.client import Client
url = "http://10.1.0.36/money_trans/api3.wsdl"
client = Client(url)
login_res = client.service.Login("login", "password")

変数「login_res」には xml 回答が含まれており、http ヘッダーは含まれていません。しかし、私はそれらからセッションIDを取得する必要があります。

4

3 に答える 3

4

あなたは実際にそのためにクッキージャーを調べたいと思います。

client = Client(url)
login_res = client.service.Login("login", "password")
for c in client.options.transport.cookiejar:
   if "sess" in str(c).lower():
      print "Session cookie:", c

わからない。私はまだSUDSの初心者です。しかし、これは私の腸が私に言うことです。

于 2010-03-21T02:36:47.723 に答える
4

Ishpeckからの応答は正しい道を進んでいます。Suds の内部構造についていくつか追加したかっただけです。

suds クライアントは、urllib2 HTTP オープナーの上にある巨大な抽象レイヤーです。HTTP クライアント、cookiejar、ヘッダー、リクエスト、およびレスポンスはすべてtransportオブジェクトに格納されます。問題は、おそらく cookiejar 内の Cookie を除いて、このアクティビティがトランスポート内にキャッシュまたは保存されないことです。

デバッグ中に何が起こっているかを確認したい場合は、コードにこれを追加することをお勧めします。

import logging
logging.basicConfig(level=logging.INFO)
logging.getLogger('suds.client').setLevel(logging.DEBUG)
logging.getLogger('suds.transport').setLevel(logging.DEBUG)

Suds はネイティブloggingモジュールを利用するため、デバッグ ログをオンにすることで、ヘッダー、変数、ペイロード、URL などを含む、その下で実行されているすべてのアクティビティを確認できます。これにより、多くの時間を節約できました。

それ以外で、ヘッダーの状態を確実に追跡する必要がある場合は、suds.transport.http.HttpTransportオブジェクトのカスタム サブクラスを作成し、デフォルトの動作の一部をオーバーロードしてから、Clientコンストラクターに渡す必要があります。

以下は、非常に単純化された例です。

from suds.transport.http import HttpTransport, Reply, TransportError
from suds.client import Client

class MyTransport(HttpTransport):
    # custom stuff done here

mytransport_instance = MyTransport()
myclient = Client(url, transport=mytransport_instance)
于 2011-04-12T00:14:11.517 に答える