【问题标题】:SOAP, Python, sudsSOAP、Python、泡沫
【发布时间】:2010-03-10 15:38:40
【问题描述】:

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

【问题讨论】:

  • 您是在寻求有关 SOAP 的 Python 库的一般建议,还是寻求有关 suds 特定方面的帮助?请尝试提出具体问题。

标签: python soap suds


【解决方案1】:

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

【讨论】:

  • +1 因为这是在正确的轨道上,假设 urllib2(Suds 本地使用的开启程序)与 cookie 配合得很好。如果路径中有任何 302 重定向,则所有赌注都将失败,因为 urllib2 + 302 重定向 + cookie = HELL。
【解决方案2】:

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 makes use of the native logging module 等通过打开调试日志记录,您可以看到在下面执行的所有活动,包括标头、变量、有效负载、URL 等。这为我节省了大量时间。

除此之外,如果您确实需要明确跟踪标头的状态,则需要创建 suds.transport.http.HttpTransport 对象的自定义子类并重载一些默认行为,然后将其传递给 @ 987654327@构造函数。

这是一个超级简化的例子:

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)

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2015-02-01
      • 2011-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多