繁体   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