首頁  >  文章  >  後端開發  >  為什麼我的 SOAP 用戶端可以在 WAMP 上執行,但在 Linux 上卻失敗並出現「SOAP-ERROR: Parsing WSDL: Couldn't load from」?

為什麼我的 SOAP 用戶端可以在 WAMP 上執行,但在 Linux 上卻失敗並出現「SOAP-ERROR: Parsing WSDL: Couldn't load from」?

Susan Sarandon
Susan Sarandon原創
2024-11-08 18:45:02687瀏覽

Why Does My SOAP Client Work on WAMP But Fail With

無法解析WSDL:「SOAP-錯誤:解析WSDL:無法載入- 但可在WAMP 上運作」

在這種情況下,個人會遇到在Linux 伺服器上使用SOAP 用戶端時出現的問題。雖然程式碼在WAMP 伺服器上完美運行,但它失敗並顯示一條錯誤訊息,指出「SOAP-ERROR:正在解析WSDL:無法載入。」

原因

根本問題,如據知情人士透露,問題在於SoapClient在特定PHP版本中不傳送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);

其他見解

受訪者進一步觀察到相關網路服務表現出特殊的行為。在沒有用戶代理字串的情況下透過 IPv6 發出的請求會失敗,而使用 IPv4 或用戶代理字串發出的請求會成功。這顯示 Web 服務的配置有潛在問題。

為了驗證這一點,受訪者示範了使用和不使用使用者代理字串發出HTTP 請求時的行為差異:

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

(成功)

最終,該問題源於IPv6 HTTP 請求、SoapClient 中不充分的用戶代理資訊以及Web 服務本身的潛在缺陷。

以上是為什麼我的 SOAP 用戶端可以在 WAMP 上執行,但在 Linux 上卻失敗並出現「SOAP-ERROR: Parsing WSDL: Couldn't load from」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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