簡體   English   中英

肥皂、Python、泡沫

[英]SOAP, Python, suds

請建議庫在 python 中使用肥皂。
現在,我正在嘗試使用“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。

我認為您實際上想查看 Cookie Jar。

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 菜鳥。 但這是我的直覺告訴我的。

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)

我認為 Suds 庫的文檔很差,所以我建議您使用Zeep 它是 Python 中的 SOAP 請求庫。 它的文檔並不完美,但比 Suds Doc 清晰得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM