gpt4 book ai didi

python - 使用 suds 访问响应 soap header

转载 作者:行者123 更新时间:2023-11-28 21:25:41 25 4
gpt4 key购买 nike

我有一个 soap 1.1/1.2 网络服务,我正在尝试使用 suds 访问.

不幸的是,该服务将身份验证 token 放入响应 soap header 中。

是否可以通过某种方式访问​​ header ?

我知道可以在请求中设置自定义 soap header ,但这不是我想要的。

最佳答案

我一直在使用(仍在维护的)suds-jurko 分支,但遇到了麻烦,因为 client.last_received() 在 fork 后很早就被删除了。所以我必须想出另一种方法来访问 header 。

幸运的是,您可以使用消息插件来存储解析后的文档,然后通过插件访问标题。为了更加方便,您可以根据服务方法处理 header ,而不是使用 xml 文档中的原始值,以获得正确类型/结构化的值。

from suds.plugin import MessagePlugin

class HeaderPlugin(MessagePlugin):
def __init__(self):
self.document = None

def parsed(self, context):
self.document = context.reply

def get_headers(self, method):
method = method.method
binding = method.binding.output
rtypes = binding.headpart_types(method, False)

envns = ('SOAP-ENV', 'http://schemas.xmlsoap.org/soap/envelope/')
soapenv = self.document.getChild('Envelope', envns)
soapheaders = soapenv.getChild('Header', envns)
nodes = soapheaders.children
if len(nodes):
resolved = rtypes[0].resolve(nobuiltin=True)
return binding.unmarshaller().process(nodes[0], resolved)
return None

用法:

from suds.client import Client

hp = HeaderPlugin()
client = Client(wsdl, plugins=[hp])

response = client.service.LoremIpsum()
headers = hp.get_headers(client.service.LoremIpsum)

示例输出:

>>> headers
(AuthenticationResponseHeader){
sessionKey = "a631cd00-c6be-416f-9bd3-dbcd322e0848"
validUntil = 2030-01-01 01:01:01.123456+01:00
}
>>> headers.validUntil
datetime.datetime(2030, 1, 1, 1, 1, 1, 123456, tzinfo=<suds.sax.date.FixedOffsetTimezone object at 0x7f7347856be0>)

关于python - 使用 suds 访问响应 soap header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13844725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com