[英]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.