最终尝试了几个小时后,我能够使用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
注意:发送前请确保请求有效负载的长度正确。