使用 telnet 命令调用 SOAP web 服务

invoking a SOAP webservice with telnet command

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

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

作为一种变通方法,我可以编写一个 java 客户端套接字并调用该服务,但即便如此,这里也是不允许的。

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

没有这些工具,还有其他调用远程服务的方法吗?

经过几个小时的尝试,我终于能够使用 telnet 调用 SOAP 服务,如下所示

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

$> telnet hostname portname

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

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

方法一:不用在POSTheader中提及端点路径,我们可以在SOAPActionheader中给出.

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>

方法二:在请求中提及端点路径header本身,所以我们可以在“”SOAPAction header中给空值(这意味着请求路径本身就是端点路径)。

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

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