このシナリオでは、個人は次のような問題に遭遇します。 Linux サーバーで SOAP クライアントを使用しているときに発生する問題。コードは WAMP サーバー上で問題なく動作しますが、「SOAP-ERROR: Parsing WSDL: Couldn't load from」というエラー メッセージが表示されて失敗します。
根本的な問題は次のとおりです。知識のある回答者によって特定された問題は、特定の PHP バージョンで HTTP ユーザー エージェント情報を送信しない SoapClient にあります。この結果、リモート 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 サービスが特異な動作を示していることを観察しました。ユーザー エージェント文字列を使用せずに 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 中国語 Web サイトの他の関連記事を参照してください。