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

时间:2016-06-15 11:08:55

标签: python soap wsdl python-requests

尝试使用python请求访问此soap webservice: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)

回复:

  

b'Sendera:ActionNotSupported无法处理带有Action \'\'的邮件   接收器,由于ContractFilter不匹配   EndpointDispatcher。这可能是因为合同不匹配   (发送方和接收方之间不匹配的操作)或绑定/安全性   发送者和接收者之间不匹配。检查发件人和   接收者具有相同的合同和相同的约束力(包括   安全要求,例如消息,运输,   无)。“

如果我理解正确,我可能需要在请求中设置操作,但无法弄清楚如何执行此操作。我是python中的soap新手,请建议如何解决这个问题。 谢谢!

1 个答案:

答案 0 :(得分:2)

只需将SOAPAction添加到标题中,例如:

headers = {'Content-type': 'text/xml;charset=UTF-8',
       'SOAPAction': 'http://google.com/ISearchService/Find'
       }