ホームページ  >  記事  >  バックエンド開発  >  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:02685ブラウズ

Why Does My SOAP Client Work on WAMP But Fail With

WSDL を解析できません:「SOAP-ERROR: WSDL を解析中: からロードできませんでした - しかし、WAMP では動作します」

このシナリオでは、個人は次のような問題に遭遇します。 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。