簡體   English   中英

PHP Soap-無法連接到主機

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM