/ / SOAP, Python, Schaum - Python, Seife, Schaum

Seife, Python, Seifenlauge - Python, Seife, Seifenlauge

Bitte informieren Sie die Bibliothek für die Arbeit mit Seife in Python.
Jetzt versuche ich, "suds" zu verwenden, und ich kann nicht verstehen, wie http-Header von Serverantworten abgerufen werden
Codebeispiel:

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")

Die Variable "login_res" enthält eine XML-Antwort und keine http-Header. Aber ich muss eine Session-ID von ihnen bekommen.

Antworten:

4 für die Antwort № 1

Ich glaube, Sie wollen dafür tatsächlich in die Keksdose schauen.

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

Ich bin mir nicht sicher. Ich bin immer noch ein SUDS-Noob. Aber das sagt mir mein Bauch.


4 für die Antwort № 2

Die Antwort von Ishpeck ist auf dem richtigen Weg. Ich wollte nur ein paar Dinge über die Suds-Interna hinzufügen.

Der Suds-Client ist eine fette Abstraktionsschicht auf einem urllib2-HTTP-Opener. Der HTTP-Client, die Cookie-Datei, die Header, die Anfrage und die Antworten werden alle im gespeichert transport Objekt. Das Problem ist, dass keine dieser Aktivitäten im Cache zwischengespeichert oder gespeichert wird, es sei denn, die Cookies in der Cookie-Box sind vorhanden, und das Verfolgen dieser Aktivitäten kann manchmal problematisch sein.

Wenn Sie sehen möchten, was beim Debugging abläuft, würde ich vorschlagen, dies Ihrem Code hinzuzufügen:

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

Suds bedient sich des Eingeborenen logging Modul Wenn Sie also die Debugprotokollierung aktivieren, sehen Sie alle Aktivitäten, die darunter ausgeführt werden, einschließlich Kopfzeilen, Variablen, Nutzdaten, URLs usw. Dies hat mir eine Menge Zeit gespart.

Abgesehen davon, wenn Sie wirklich den Status in Ihren Headern definitiv nachverfolgen müssen, müssen Sie eine benutzerdefinierte Unterklasse von a erstellen suds.transport.http.HttpTransport Objekt und überlasten einen Teil des Standardverhaltens und übergeben es dann an Client Konstrukteur.

Hier ist ein stark vereinfachtes Beispiel:

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)