[英]PHP Soap - Could not connect to host
我已經查看了其他解決方案,但是找不到類似的問題:
這段代碼可以正常工作:
$wsdlUrl = "https://pilot.prove-uru.co.uk/URUws/uru10a.asmx?wsdl";
$client = new soapclient($wsdlUrl);
print_r($client->__getFunctions());
但是,當我嘗試進行方法調用時:
$params = array("AddressLookupUK" => array("address" => array("Postcode" => "NE20 9RF"),
'AccountName' => "xxxx",
'Password' => "xxxx"));
$result = $client->AddressLookupUK($params);
我收到錯誤消息“ SoapFault異常:[HTTP]無法連接到主機”。 如果我將方法調用更改為
$result = $client->FalseMethod($params);
我回來了“函數(“ FalseMethod”)不是該服務的有效方法”,它表明它正在按預期方式連接。 有人有我可以嘗試的指針嗎?
謝謝
這是我使用的代碼,希望對您有所幫助:
$wsdlUrl = "address.wsdl";
$client = new soapclient($wsdlUrl);
$params = array('address' => array('Postcode' => $postcode, 'BuildingNo' => $buildingNo),
'AccountName' => 'XXXX',
'Password' => 'XXXX');
$result = $client->AddressLookupUK($params);
$echoText = '';
if (is_null($result->AddressLookupUKResult))
{
//tell the user nothing was returned
}
else
{
//checks to see if the result set contains only one item
if (is_array($result->AddressLookupUKResult->URUAddressFixed))
{
foreach($result->AddressLookupUKResult->URUAddressFixed as $item)
{
//use code like $item->BuildingNo to access the data
}
}
else
{
//if there was there was more than one then access using something like
$result->AddressLookupUKResult->URUAddressFixed->BuildingNo
}
}
理查德
在WSDL上,您可以看到端點定義:
<wsdl:service name="URU10a">
<wsdl:port name="URU10aSoap" binding="tns:URU10aSoap">
<soap:address location="https://pilot.prove-uru.co.uk:8443/URUws/uru10a.asmx"/>
</wsdl:port>
<wsdl:port name="URU10aSoap12" binding="tns:URU10aSoap12">
<soap12:address location="https://pilot.prove-uru.co.uk:8443/URUws/uru10a.asmx"/>
</wsdl:port>
</wsdl:service>
我認為,您在連接8443端口時遇到問題。 在我的受限網絡中,該服務均無效。
編輯
好的,我嘗試通過更改WSDL使用標准SSL端口進行連接。 我已經將WSDL從https://pilot.prove-uru.co.uk/URUws/uru10a.asmx?wsdl保存到我的硬盤中,從端點定義中刪除了端口號,並嘗試使用soapUI進行連接。 萬歲,我得到了回應。
因此,也許他們不通過更新WSDL將服務從8443移至443。 或者它在兩個端口下運行,但是由於我們本地網絡的限制,您(和我)無法連接8443。 無論如何,我認為您應該聯系該服務的提供者並澄清這一點,而不要使用其WSDL的修補版本。
僅由於WSDL檢查,“功能(“ FalseMethod”)不是此服務的有效方法”錯誤。 PHP已成功下載WSDL,但無法訪問其中的Web服務。
您必須調試trace
設置為1的Soap Call:
$client = SoapClient("some.wsdl", array('trace' => 1));
$result = $client->SomeFunction();
echo "REQUEST:\n" . $client->__getLastRequest() . "\n";
echo "REQUEST HEADERS:\n" . $client->__getLastRequestHeaders() . "\n";
echo "RESPONSE HEADERS:\n" . $client->__getLastResponseHeaders() . "\n";
echo "Response:\n" . $client->__getLastResponse() . "\n";
另外,請查看Wsdl中的URL集。
我接受了DerVO的回答,因為他的指針幫助我解決了該問題。 端口號並非完全引起問題,但我認為可能是由於某種原因造成的。
在soap UI中加載WSDL時,它顯示的是簡單和復雜的對象類型,沒有問題,但是在PHP中,這導致它掉落,即WSDL定義了一組“
理查德
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.