Python + SOAP:由于EndpointDispatcher上的ContractFilter不匹配,带有Action \'\'的消息无法在接收方处理

moa*_*lee 4 python soap wsdl python-requests

尝试使用python请求访问此肥皂网络服务:http : //bsestarmfdemo.bseindia.com/MFUploadService/MFUploadService.svc?WSDL

这是我的要求:

import requests
url="http://bsestarmfdemo.bseindia.com/MFUploadService/MFUploadService.svc?WSDL"
#headers = {'content-type': 'application/soap+xml'}
headers = {'content-type': 'application/soap+xml'}
body = """<?xml version="1.0" encoding="UTF-8"?>
         <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/">
   <soap:Header/>
   <soap:Body>
      <tem:getPassword>
         <!--Optional:-->
         <tem:UserId>1003201</tem:UserId>
         <!--Optional:-->
         <tem:MemberId>10032</tem:MemberId>
         <!--Optional:-->
         <tem:Password>xxxxxxxx</tem:Password>
         <!--Optional:-->
         <tem:PassKey>xxxxxx123</tem:PassKey>
      </tem:getPassword>
   </soap:Body>
</soap:Envelope>"""

response = requests.post(url,data=body,headers=headers)
print (response.content)
Run Code Online (Sandbox Code Playgroud)

这个回应:

b' Sendera:ActionNotSupported由于EndpointDispatcher的ContractFilter不匹配,带有Action \'\ ' 的消息无法在接收方处理。这可能是由于合同不匹配(发送方和接收方之间的操作不匹配)或发送方和接收方之间的绑定/安全不匹配造成的。检查发送方和接收方是否具有相同的合同和相同的绑定(包括安全要求,例如消息,传输,无)。

如果我理解正确,则可能需要在请求中设置操作,但无法弄清楚该怎么做。我是python肥皂的新手,请提出如何解决此问题的建议。谢谢!

小智 5

只需将SOAPAction添加到标头上,例如:

headers = {'Content-type': 'text/xml;charset=UTF-8',
       'SOAPAction': 'http://google.com/ISearchService/Find'
       }
Run Code Online (Sandbox Code Playgroud)