python - 如何从 suds 请求中获取响应 header

标签 python http soap suds

我正在使用 python suds 模块,并希望从 suds 响应中检索响应 header (特别是 Last-Modified)。

最佳答案

答案是付出超出必要的努力。

我这里有 suds 版本 0.3.9。我必须对正在使用的传输类进行子类化,并包装 send 方法以将最后接收到的 header 存储在传输类中。

import logging
logging.basicConfig(level=logging.INFO)
#logging.getLogger('suds.client').setLevel(logging.DEBUG)
#logging.getLogger('suds.transport').setLevel(logging.DEBUG)
#logging.getLogger('suds.xsd.schema').setLevel(logging.DEBUG)
#logging.getLogger('suds.wsdl').setLevel(logging.DEBUG)

from suds.client import Client
from suds.xsd.doctor import ImportDoctor, Import
from suds.transport.https import HttpAuthenticated

class MyTransport(HttpAuthenticated):
    def __init__(self,*args,**kwargs):
        HttpAuthenticated.__init__(self, *args, **kwargs)
        self.last_headers = None

    def send(self,request):
        result = HttpAuthenticated.send(self, request)
        self.last_headers = result.headers
        return result

doctor = ImportDoctor(Import('http://schemas.xmlsoap.org/soap/encoding/'))
svc_url  = 'https://server/Service?wsdl'
svc_user = 'username'
svc_pass = 'password'

client = Client(svc_url,doctor=doctor,transport=MyTransport())
# For some reason I can't be bothered to investigate, setting the username and password in
# client kwargs doesn't pass them to the custom transport:
client.set_options(location=svc_url.partition('?')[0],username=svc_user,password=svc_pass)
# call a method
client.service.SomeMethod()
# look at headers
client.options.transport.last_headers

关于python - 如何从 suds 请求中获取响应 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9996941/

相关文章:

python - 如何初始化从Python类中的其他属性计算得到的属性

python - 如何将文档附加到mongodb中的现有文档

angular - 在 ionic3 中附加 http header 的错误?

java - 使用 org.apache.http 发送带有 SOAP 操作的 HTTP Post 请求

java - 如何在 Java Web 服务上接收 SOAP XML

python - 编写一个脚本,使用postfix进行内容过滤

http - 在 Jmeter 中如何使用 MD5Hex 断言来验证下载的文件?

java - 从 Eclipse 创建 Web 服务客户端

java - DemoIdentity DemoTrust keystore 无法与 Weblogic 上的标准 SOAP 客户端一起使用

Python 单元测试。如何在测试用例之间添加一些休眠时间?