gpt4 book ai didi

python - 使用 Zeep 向 SOAP 服务发送原始 XML 请求(尝试复制参数)

转载 作者:行者123 更新时间:2023-12-04 15:34:23 28 4
gpt4 key购买 nike

我能够使用 Zeep 发送一个简单的 SOAP 请求。

    with client.settings(strict=False):
resp = client.service.demandeFicheProduit(
demandeur=self.xxx, motDePasse=self.yyy,
ean13s="foo",
multiple=False)

但是,我需要多次给出 ean13s参数,这在 Python 函数调用中是不可能的,所以我想我需要自己构建 XML。

随着 Zeep 的调试,我看到发送的 XML 是这样的:
<?xml version='1.0' encoding='utf-8'?>
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Body>
<ns0:demandeFicheProduit xmlns:ns0="http://fel.ws.accelya.com/">
<demandeur>xxx
</demandeur>
<motDePasse>yyy
</motDePasse>
<ean13s>foo
</ean13s>
<multiple>false
</multiple>
</ns0:demandeFicheProduit>
</soap-env:Body>
</soap-env:Envelope>

所以我只需要复制
      <ean13s>foo
</ean13s>

部分。

查看Zeep,我看到一个Transport.post_xml 方法: https://github.com/mvantellingen/python-zeep/blob/da8a88b9f5/src/zeep/transports.py#L86它以 lxml 树作为参数。 ( doc )
def post_xml(self, address, envelope, headers):
"""Post the envelope xml element to the given address with the headers.
This method is intended to be overriden if you want to customize the
serialization of the xml element. By default the body is formatted
and encoded as utf-8. See ``zeep.wsdl.utils.etree_to_string``.
"""
message = etree_to_string(envelope)
return self.post(address, message, headers)

我试过 post_raw_xml方法,没有 etree_to_string :
    def post_raw_xml(self, address, raw_envelope, headers):
return self.post(address, raw_envelope, headers)

我用上面的 XML 调用它
transport = zeep.Transport()
transport.post_raw_xml("adress", my_xml, {}) # {}: headers?

并且响应状态为 OK (200),但是服务将其回答为无效请求。

是否有我没有注意的 XML/SOAP 错综复杂的地方?编码?标题? (这里 {})

编辑 :在对 Zeep 内部进行更多监视之后,它发送的 header 是
{'SOAPAction': '""', 'Content-Type': 'text/xml; charset=utf-8'}

所以我想我可以简单地使用 requests.post ,还没有用。使用 requests ,见 Sending SOAP request using Python Requests

否则如何手动构建 XML?

关于如何复制 eans13 的更多想法争论?

谢谢你。

最佳答案

我在没有 Zeep 的情况下解决了我的问题。

我发送了一个带有 requests 的原始 XML 字符串,我不使用 lxml 或 xsd 手动构建 XML。

帮助我的是打印调试 Zeep 的内部结构 transport.py/post方法(所以标题是 {'SOAPAction': '""', 'Content-Type': 'text/xml; charset=utf-8'}
),

另一个问题:Sending SOAP request using Python Requests发送帖子请求:

requests.post(url, data=xml, headers=headers)

并注意 XML 字符串(是的,在结束 <?xml> 标记之后有一个换行符)。

缺点是解析 XML。

关于python - 使用 Zeep 向 SOAP 服务发送原始 XML 请求(尝试复制参数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60228812/

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