Maison >développement back-end >tutoriel php >Pourquoi mon client SOAP fonctionne-t-il sur WAMP mais échoue-t-il avec « SOAP-ERROR : Analyse WSDL : Impossible de charger depuis » sous Linux ?

Pourquoi mon client SOAP fonctionne-t-il sur WAMP mais échoue-t-il avec « SOAP-ERROR : Analyse WSDL : Impossible de charger depuis » sous Linux ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-08 18:45:02764parcourir

Why Does My SOAP Client Work on WAMP But Fail With

Impossible d'analyser WSDL : "SOAP-ERROR : Analyse WSDL : Impossible de charger depuis - mais fonctionne sur WAMP"

Dans ce scénario, un individu rencontre un problème lors de l'utilisation d'un client SOAP sur un serveur Linux. Bien que le code fonctionne parfaitement sur un serveur WAMP, il échoue avec un message d'erreur indiquant "SOAP-ERROR : Analyse WSDL : Impossible de charger depuis."

Cause

Le problème sous-jacent, comme identifié par un répondant bien informé, réside dans le fait que SoapClient ne transmet pas les informations de l'agent utilisateur HTTP dans des versions PHP spécifiques. Cela entraîne le rejet de la demande par le service Web distant.

Résolution

Pour remédier à la situation, le répondant recommande de définir explicitement l'agent utilisateur dans le code en employant un flux de contexte :

$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);

Informations supplémentaires

Le répondant observe en outre que le service Web concerné présente un comportement particulier. Les requêtes effectuées via IPv6 sans chaîne d'agent utilisateur échouent, tandis que celles effectuées avec IPv4 ou une chaîne d'agent utilisateur réussissent. Cela suggère un problème potentiel avec la configuration du service Web.

Pour vérifier cela, le répondant démontre la différence de comportement lors des requêtes HTTP avec et sans chaîne d'agent utilisateur :

curl  -A ''  -6 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl

( échoue)

curl  -A 'cURL User Agent'  -6 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl

(réussi)

En fin de compte, le problème vient de la combinaison de Requêtes HTTP IPv6, informations inadéquates sur l'agent utilisateur dans SoapClient et failles potentielles dans le service Web lui-même.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn