【问题标题】:how do you send a SOAP request?你如何发送 SOAP 请求?
【发布时间】:2012-07-12 07:19:22
【问题描述】:

我是 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 解析错误:语法错误 位置:localhost/projects/test.xml 第 1 行,第 1 列:POST /MobileCashPayout.asmx HTTP/1.1 ^

我发送的方式有误吗? 请帮帮我?

【问题讨论】:

  • XML 内容以&lt;?xml 开头。之前的一切都是 HTTP 标头。你用的是什么平台?爪哇?

标签: xml http soap


【解决方案1】:

在浏览器中打开此文档不会发送请求。您有多种选择:

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

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

【讨论】:

  • 谢谢,我对PHP很熟悉。不过,我需要一些指导方针。 Soap UI 并没有真正帮助,因为 SoapUI 使用 WSDL/WADL 而不是所需的 xml。有什么指导方针吗?
  • 您说得对,SoapUI 需要定义您希望使用的 Web 服务。 Web 服务通常在 .wsdl 文件中定义(WSDL = Web 服务描述语言),因此您只需要调用 MobileCashPayout 服务的 wsdl。如果您键入 /MobileCashPayout.asmx?wsdl(将 替换为服务所在的实际 URL),很可能会找到它。如果你成功了,请告诉我。
  • 我确实尝试过你的解决方案,但是,得到一个
  • 我在浏览器中尝试了您的解决方案,但收到“404 错误:找不到您要查找的页面!” SOAPUI 我得到:错误加载 [URL-to-the-web-service/…: 错误意外字符遇到 lex 状态 8:';'有什么建议吗?
  • 您能否联系网络服务提供商,让您知道服务的位置和/或向您发送 WSDL?与其他人的 Web 服务集成时,服务提供者通常会向您发送 WSDL。
【解决方案2】:

这篇博文帮助了我。 Python SOAP Request using Requests

#!/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))

【讨论】:

  • 仅供参考,这是仅链接的答案,必须包含来自链接的基本详细信息/代码,因为该链接将来可能不再存在!
【解决方案3】:

在 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

这是描述整个过程的link

【讨论】:

  • 我永远喜欢卷曲。很简单。
【解决方案4】:

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

发送请求。

【讨论】:

  • 谢谢,您的回复很有见地,因为您向我介绍了 Soap UI。问题是上面的初始 SOAP 代码是用 XML 而不是 WSDL/WADL 编写的。 Soap UI 使用 WSDL/WADL 而不是所需的 XML。有什么想法吗?
  • SOAP UI 支持 XML 格式和可编辑的请求,并提供 XML 格式的响应。您可以将您的 XML 复制并粘贴到 SOAP 请求窗口中。
【解决方案5】:

【讨论】:

    【解决方案6】:

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

    $svc = New-WebServiceProxy -Uri "http://<server>/MobileCashPayout.asmx?op=Payout"
    $x=$svc.Payout("<Username>","<Password>","<referenceID>","<sourceMsisdn>","<destMsisdn>",<Amount>,"<MobilePin>","<cashInformation>","<merchantName>")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-25
      • 2016-03-25
      • 2013-07-01
      • 2017-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多