SOAP クライアントが WAMP では動作するのに、Linux では「SOAP-ERROR: Parsing WSDL: Couldn't load from」というエラーで失敗するのはなぜですか?

Susan Sarandon
リリース: 2024-11-08 18:45:02
オリジナル
684 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート