首頁 > 後端開發 > php教程 > 為什麼我的 SOAP 用戶端無法在某些 PHP 版本上載入 WSDL?

為什麼我的 SOAP 用戶端無法在某些 PHP 版本上載入 WSDL?

Barbara Streisand
發布: 2024-11-08 19:59:02
原創
1011 人瀏覽過

Why Does My SOAP Client Fail to Load a WSDL on Some PHP Versions?

SOAP-ERROR: Parsing WSDL: Couldn't Load from - Error

在這種情況下,使用者在嘗試從WSDL 使用WSDL 時遇到SOAP錯誤網路服務。該錯誤明確指出 SOAP 用戶端無法從提供的 URL 載入 WSDL。

解決此問題的關鍵在於 SOAP 用戶端在不同 PHP 版本上的不同行為。某些版本的 PHP 忽略發送 HTTP 使用者代理訊息,導致嘗試存取 Web 服務時出現問題。

解決方案

以下是使用上下文流明確設定用戶代理的解決方案:

try {
    $opts = array(
        'http' => array(
            'user_agent' => 'PHPSoapClient'
        )
    );
    $context = stream_context_create($opts);

    $wsdlUrl = 'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl';
    $soapClientOptions = array(
        'stream_context' => $context,
        'cache_wsdl' => WSDL_CACHE_NONE
    );

    $client = new SoapClient($wsdlUrl, $soapClientOptions);

    $checkVatParameters = array(
        'countryCode' => 'DK',
        'vatNumber' => '47458714'
    );

    $result = $client->checkVat($checkVatParameters);
    print_r($result);
}
catch(Exception $e) {
    echo $e->getMessage();
}
登入後複製

額外見解

值得注意的是,該問題也可能歸因於Web 服務本身的問題。透過使用帶有和不帶用戶代理的curl測試URL,發現不帶用戶代理字串的IPv6請求失敗,而帶有或不帶用戶代理字串的IPv4請求成功。

此觀察顯示之間存在相容性問題Web 服務和使用者 Linux 主機的具體配置。

以上是為什麼我的 SOAP 用戶端無法在某些 PHP 版本上載入 WSDL?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板