强制PHP SoapClient使用HTTP GET请求

强制PHP SoapClient使用HTTP GET请求,php,soap,http-headers,Php,Soap,Http Headers,我必须与只接受http GET请求的SOAP服务器接口(使用POST会导致“错误请求”错误) 我在PHP文档中找不到关于如何实现这一点的任何内容,因此我抓住了要害,试图使用stream_上下文设置请求头 $soap_client = new SoapClient($wsdl, array( "trace" => $trace, "exceptions" => $exceptions, 'proxy

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

我在PHP文档中找不到关于如何实现这一点的任何内容,因此我抓住了要害,试图使用stream_上下文设置请求头

$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 get请求吗

我做了一些研究,发现GET请求是在SOAP1.2中引入的,但通常SOAP不支持GET请求,而REST支持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客户端,然后像下面这样转储请求:


然后对$client->\uu getLastRequest()中的xml进行“编码”,将其传递到URL并通过curl发送。

您可以编写自己的类扩展SoapClient,并实现
\uu doRequest
方法,使用
GET
执行请求。我的印象是,它仍然以POST的形式发送XML,但出于某种原因,需要将头设置为GET。不幸的是,我只能通过SOAP接口访问这个服务器,所以我不能确定。我已经通过将请求类型设置为GET,使用Wizdler(chrome插件)成功地测试了该服务,但是我不确定Wizdler如何发送XML数据。
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());