2016-05-13 160 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