6

请建议图书馆在 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。

4

3 回答 3

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 回答
4

我认为您实际上想在 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 菜鸟。但这是我的直觉告诉我的。

于 2010-03-21T02:36:47.723 回答
0

我认为 Suds 库的文档很差,所以我建议你使用Zeep。它是 Python 中的 SOAP 请求库。它的文档并不完美,但比 Suds Doc 清楚得多。

于 2020-01-29T14:52:15.170 回答