在這種情況下,使用者在嘗試從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中文網其他相關文章!