首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SOAP、Python、suds

SOAP、Python、suds
EN

Stack Overflow用户
提问于 2010-03-10 23:38:40
回答 3查看 8.1K关注 0票数 6

请建议在python中使用soap的库。

现在,我正在尝试使用"suds“,我不能理解如何从服务器回复中获取http头

代码示例:

代码语言:javascript
复制
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。

EN

回答 3

Stack Overflow用户

发布于 2010-03-21 10:36:48

我认为你实际上是想在Cookie Jar中寻找它。

代码语言:javascript
复制
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

我没有把握。我自己还是个肥皂泡新手。但这是我的直觉告诉我的

票数 4
EN

Stack Overflow用户

发布于 2011-04-12 08:14:12

来自Ishpeck的响应是正确的。我只是想添加一些关于Suds内部的东西。

suds客户端是位于urllib2 HTTP opener之上的一个庞大的抽象层。HTTP client、cookiejar、头、请求和响应都存储在transport对象中。问题是,除了cookiejar中的cookie之外,所有这些活动都不会被缓存或存储在传输中,甚至有时跟踪这些cookie也会有问题。

如果您想在调试时看到发生了什么,我的建议是将以下代码添加到您的代码中:

代码语言:javascript
复制
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等。这为我节省了大量的时间。

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

下面是一个超级简单的例子:

代码语言:javascript
复制
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)
票数 4
EN

Stack Overflow用户

发布于 2020-01-29 22:52:15

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2418172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档