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 サイトの他の関連記事を参照してください。