强制PHP SoapClient使用HTTP GET请求

时间:2016-05-13 06:00:49

标签: php soap http-headers

我必须与只接受http GET请求的SOAP服务器接口(使用POST导致'错误请求'错误)。

我无法在文档PHP文档中找到任何关于如何抓住这些内容的东西我试图使用stream_context设置请求标头

$soap_client = new SoapClient($wsdl,
        array(
            "trace" => $trace,
            "exceptions" => $exceptions,
            'proxy_host' => $proxyHost,
            "proxy_port" => $proxyPort,
            "soap_version" => SOAP_1_2,
            'stream_context' => stream_context_create(array('http' => array("header" => "request: GET")))
            ));

没有成功。有没有人知道我在使用SoapClient时如何强制获取http获取请求?

1 个答案:

答案 0 :(得分:0)

我已经完成了一些研究,并且我发现GET请求是在SOAP 1.2中引入的,但一般情况下,SOAP不支持GET请求。

我认为在某些情况下可能会有解决方法。这不是直截了当的解决方案,因为没有那么多问题可以解决。

SOAP通过POST发送数据。在GET请求中,您只能使用URL并将任何参数包装到变量,如

http://server.domain/path/file.php?var1=value1&var2=value2&etc=etc

因此,如果SOAP只接受GET,那就很奇怪,但是如果你知道,你可以传递变量xml中的数据,你可以尝试通过URL发送它:

http://server.domain/path/file.php?xml=encoded_data

如果那是真的(我不确定)那么你可以使用SOAP客户端,然后转储请求,如下所示:http://www.herongyang.com/ws/php_soap_2.html

echo("\nDumping request headers:\n" . $client->__getLastRequestHeaders());
echo("\nDumping request:\n" . $client->__getLastRequest());
echo("\nDumping response headers:\n" . $client->__getLastResponseHeaders());
echo("\nDumping response:\n" . $client->__getLastResponse());

然后"编码"来自$ client-> __ getLastRequest()的xml,将其传递给URL并通过curl发送。