首頁  >  文章  >  後端開發  >  為什麼我的 SoapClient 在 Linux 上無法解析 WSDL,但在 WAMP 上卻可以?

為什麼我的 SoapClient 在 Linux 上無法解析 WSDL,但在 WAMP 上卻可以?

Linda Hamilton
Linda Hamilton原創
2024-11-08 06:34:02788瀏覽

Why Does My SoapClient Fail to Parse WSDL on Linux But Work on WAMP?

SOAP 錯誤:解析WSDL:無法從WSDL URL 載入

問題

在Linux 主伺服器上,SoapClient 無法解析來自給定WSDL,導致錯誤:「SOAP-錯誤:正在解析WSDL:無法載入- 但適用於WAMP」。但是,直接呼叫 URL 或從命令列使用curl 會傳回預期的 XML 回應。

答案

缺少用戶代理字串:

For對於某些版本的PHP,SoapClient 預設情況下可能不會發送HTTP 用戶代理資訊.這可能會導致正在使用的 Web 服務出現問題。

解決方案:

使用上下文流明確設定用戶代理:

$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);

Web 服務問題:

此外,我們發現相關Web 服務在沒有使用者代理字串的IPv6 請求方面存在問題。要驗證這一點,請在 Linux 主機上嘗試以下命令:

curl  -A ''  -6 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl
curl  -A 'cURL User Agent'  -6 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl

curl  -A ''  -4 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl
curl  -A 'cURL User Agent'  -4 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl

沒有用戶代理的 IPv6 請求將失敗,而所有其他請求將成功。這表示 Linux 主機正在將 Web 服務的網域解析為其 IPv6 位址,並且 SoapClient 預設情況下未新增使用者代理字串。

以上是為什麼我的 SoapClient 在 Linux 上無法解析 WSDL,但在 WAMP 上卻可以?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn