17

我是 SOAP 和 xml 的新手。我阅读了许多教程,但似乎没有什么足够清楚。

我有点困惑,如何发送 SOAP 请求?我尝试这样做的方法是将我的 SOAP 请求(如下所示)保存为:testRequest.xml。

POST /MobileCashPayout.asmx HTTP/1.1
Host: 192.168.1.80
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<Payout xmlns="http://www.mycel.com/">
<Username>string</Username>
<Password>string</Password>
<referenceID>string</referenceID>
<sourceMsisdn>string</sourceMsisdn>
<destMsisdn>string</destMsisdn>
<Amount>decimal</Amount>
<MobilePin>string</MobilePin>
<cashInformation>string</cashInformation>
<merchantName>string</merchantName>
</Payout>
</soap12:Body>
</soap12:Envelope>

然后我用浏览器打开文件(testRequest.xml)以便发送它..

我得到的回报是一条错误消息,说明:XML Parsing Error: syntax error Location: localhost/projects/test.xml Line Number 1, Column 1:POST /MobileCashPayout.asmx HTTP/1.1 ^

我发送它的方式错误吗?请帮帮我?

4

6 回答 6

17

在浏览器中打开此文档不会发送请求。你有几个选择:

  • 用任何熟悉的语言编写一个小脚本,脚本应该连接到指定的服务器并发送一个带有正文的 POST 请求,如您的消息中所述
  • 使用一些现有的程序为您做到这一点

如果您没有经验,我肯定会推荐第二种选择。我个人最喜欢的是 SoapUI,请参见此处

于 2012-07-12T07:26:26.583 回答
7

这篇博文帮助了我。 使用请求的 Python SOAP 请求

#!/usr/bin/env python
# encoding: utf-8

import requests
from XML import XML

request = u"""<?xml version="1.0" encoding="utf-8"?>
              <soapenv:envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://www.webserviceX.NET/">
                  <soapenv:header>
                  <soapenv:body>
                      <web:conversionrate>
                          <web:fromcurrency>GBP</web:fromcurrency>
                          <web:tocurrency>CHF</web:tocurrency>
                      </web:conversionrate>
                  </soapenv:body>
              </soapenv:header></soapenv:envelope>"""

encoded_request = request.encode('utf-8')

headers = {"Host": "www.webservicex.net",
           "Content-Type": "text/xml; charset=UTF-8",
           "Content-Length": len(encoded_request)}

response = requests.post(url="http://www.webservicex.net/CurrencyConvertor.asmx",
                         headers = headers,
                         data = encoded_request,
                         verify=False)

print unicode(XML(response.text))
于 2014-07-16T18:20:40.430 回答
4

在 linux 上,您可以使用它curl来发送soap xml。这是如何做到的:

curl --header "Content-Type: text/xml;charset=UTF-8" --header "SOAPAction: ACTION_YOU_WANT_TO_CALL" --data @FILE_NAME URL_OF_THE_SOAP_WEB_SERVICE_ENDPOINT

使用testRequest.xml创建的文件,您可以

curl --header "Content-Type: text/xml;charset=UTF-8" --header "SOAPAction: ACTION_YOU_WANT_TO_CALL" --data @testRequest.xml URL_OF_THE_SOAP_WEB_SERVICE_ENDPOINT

这是一个描述完整过程的链接

于 2017-07-18T03:09:18.587 回答
2

据我所知,您不能在浏览器时发送肥皂请求。我建议你使用像Soap UI这样的工具

发送请求。

于 2012-07-12T07:27:10.603 回答
0

你可以使用邮递员。这对 REST 和 Soap 有好处 https://learning.postman.com/docs/sending-requests/supported-api-frameworks/making-soap-requests/

于 2020-08-20T05:22:37.150 回答
0

PowerShell 解决方案。用正确的值替换尖括号中的所有项目。

$svc = New-WebServiceProxy -Uri "http://<server>/MobileCashPayout.asmx?op=Payout"
$x=$svc.Payout("<Username>","<Password>","<referenceID>","<sourceMsisdn>","<destMsisdn>",<Amount>,"<MobilePin>","<cashInformation>","<merchantName>")
于 2021-10-14T14:12:58.900 回答