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

Python 使用Zeep向SOAP服务发送原始XML请求(尝试复制参数),python,soap,zeep,Python,Soap,Zeep,我能够用Zeep发送一个简单的SOAP请求 with client.settings(strict=False): resp = client.service.demandeFicheProduit( demandeur=self.xxx, motDePasse=self.yyy, ean13s="foo", multiple=False) 但是,我需要多次给出ean13s参数,这在Python函数

我能够用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>
我尝试了一种
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内部进行多一点监视之后,它发送的头将被删除

{'SOAPAction': '""', 'Content-Type': 'text/xml; charset=utf-8'}
所以我想我可以简单地使用
requests.post
,但没有用。要使用
请求
,请参阅

如何以其他方式手动构建XML

关于如何复制
eans13
参数,还有什么想法吗


谢谢。

我没有Zeep就解决了我的问题

我发送带有
请求的原始XML字符串,我不使用lxml或xsd手动构造XML

帮助我的是打印调试Zeep的
transport.py/post
方法的内部(因此标题是
{'SOAPAction':'“”,'Content Type':'text/xml;charset=utf-8'}

其他问题:要发送post请求,请执行以下操作:

requests.post(url, data=xml, headers=headers)
注意XML字符串(是的,结束标记后有一个换行符)


缺点是要重新解析XML。

您好,您能给出一个例子吗?您好,我不能给出一个连接到Web服务的可复制示例,因为它需要用户名和密码。我尽量做到精确,作为补偿。没有wsdl url,Zeep xml请求可能吗?
{'SOAPAction': '""', 'Content-Type': 'text/xml; charset=utf-8'}
requests.post(url, data=xml, headers=headers)