2016-05-13 98 views
2

我必须与仅接受http GET请求的SOAP服务器进行接口(使用POST结果发出'错误请求'错误)。强制PHP SoapClient使用HTTP GET请求

我无法找到如何到这个救命稻草,从而把握文档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请求?

+0

你可以编写自己的扩展SoapClient的类并实现'__doRequest'方法来使用'GET'执行请求 –

回答

0

我已经做了一些研究,并且发现GET请求是在SOAP 1.2中引入的,但通常SOAP在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客户端,然后转储请求也喜欢在这里: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发送。

+0

我感觉它仍然将XML作为POST发送,但是由于某种原因需要头文件被设置为GET。不幸的是,我只能通过SOAP接口访问此服务器,所以我无法确定。我已经通过将请求类型设置为GET来成功测试使用Wizdler(chrome插件)的服务,但是我不确定Wizdler如何发送XML数据。 – sharper