ホームページ  >  記事  >  バックエンド開発  >  SoapClient が運用サーバーでは WSDL の解析に失敗するのに、ローカル サーバーでは動作するのはなぜですか?

SoapClient が運用サーバーでは WSDL の解析に失敗するのに、ローカル サーバーでは動作するのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-09 20:50:02340ブラウズ

Why does my SoapClient fail to parse a WSDL on the production server but works on my local server?

SOAP エラー: 運用サーバーでの WSDL の解析

SoapClient を利用してリモート URL から WSDL を解析しようとすると、SOAP-運用サーバーでエラーが発生しました。ローカル WAMP サーバーは操作を正常に処理しましたが、運用サーバーでは問題が解決しませんでした。

エラー メッセージ

受信した特定のエラー メッセージは次のとおりです:

SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl' : failed to load external entity "http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl"/taxation_customs/vies/checkVatService.wsdl"

調査

さらに調査したところ、URL から WSDL をロードしようとしたときに SoapClient が WSDL を解析できないことがエラーの原因であることが判明しました。この問題は、コマンド ラインからcurlを使用した直接呼び出しでWSDLにアクセスできるにもかかわらず発生しました。

解決策

この問題は、SoapClient内でユーザー エージェントを明示的に設定することで解決されました。コンテキスト ストリームを使用する:

$soapClientOptions = array(
    'stream_context' => $context,
    'cache_wsdl' => WSDL_CACHE_NONE
);

$client = new SoapClient($wsdlUrl, $soapClientOptions);

このアプローチにより、必要な HTTP ユーザー エージェント情報がリクエストに確実に含まれるようになり、SoapClient がリモート URL からの WSDL を正常に解析できるようになります。

追加の分析情報

さらなる分析により、この問題は運用サーバーの特定の設定に起因する可能性があることが判明しました。 HTTP ユーザー エージェント文字列が欠落している IPv6 経由の HTTP リクエストがエラーを引き起こしているようです。 IPv4 を強制するか、ユーザー エージェント文字列を明示的に指定することにより、リクエストは SOAP エラーが発生することなく成功することができました。

以上がSoapClient が運用サーバーでは WSDL の解析に失敗するのに、ローカル サーバーでは動作するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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