使用 telnet 命令调用 SOAP Web 服务

Posted

技术标签:

【中文标题】使用 telnet 命令调用 SOAP Web 服务【英文标题】:invoking a SOAP webservice with telnet command 【发布时间】:2016-08-07 06:25:59 【问题描述】:

我遇到了一种情况,我必须从其中一个生产服务器手动调用 SOAP Web 服务(部署在另一台服务器中)并检查一切是否正常。

因为这些都是实时服务器,所以没有像 wgetcurlnc 这样的网络工具可用。我尝试检查解决方案是谷歌,但没有运气。

作为一种解决方法,我可以编写一个 java 客户端套接字并调用该服务,但即使这样也是不允许的。

telnet 在那里,但我不确定如何使它适用于我的情况。

有没有其他方法可以在没有这些工具的情况下调用远程服务?

【问题讨论】:

【参考方案1】:

最终尝试了几个小时后,我能够使用telnet 调用 SOAP 服务,如下所示

首先打开一个到远程服务器的 TCP 连接,如下所示。

$> telnet hostname portname

连接后,将请求设置为以下方法之一并粘贴到屏幕上,然后按两次enter key

我们可以通过两种方式调用服务。

方法一:不用在POST标头中提及端点路径,我们可以在SOAPAction标头中给出。

POST / HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: text/xml;charset=UTF-8
SOAPAction: "<endpoint URL from WSDL>"
Content-Length: <number of bytes you are sending in body section>
Host: <hostname>:<port>
Proxy-Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)

<SOAP Request payload>

方法2:在请求头本身中提及endpoint path,所以我们可以在"" SOAPAction header中给空值(表示请求路径本身就是Endpoint路径)。

POST /soap/server HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: text/xml;charset=UTF-8
SOAPAction: ""
Content-Length: <payload size>
Host: hostname:port
Proxy-Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)

<SOAP Request payload>

响应:调用成功后,会打印如下响应

HTTP/1.1 200 OK
Content-Type: text/xml;charset=UTF-8
Content-Length: <response payload size>

<SOAP response payload>

有关 SOAPHeader 的更多信息check this link

注意:发送前请确保请求有效负载的长度正确。

【讨论】:

感谢您返回解决方案!你今天让互联网变得更智能了 :)

以上是关于使用 telnet 命令调用 SOAP Web 服务的主要内容,如果未能解决你的问题,请参考以下文章

如何从命令行调用 SOAP wsdl Web 服务

PayPal SOAP API - 不支持版本

使用 SOAP 从 VBA 调用 Web 服务

web service011——使用soap1.1和soap1.2发布和调用服务

如何使用带有 SSL 的 httpclient 调用 SOAP Web 服务

C#使用SOAP调用Web Service