Maison >développement back-end >tutoriel php >Pourquoi mon SoapClient ne parvient-il pas à analyser WSDL sous Linux mais fonctionne-t-il sous WAMP ?

Pourquoi mon SoapClient ne parvient-il pas à analyser WSDL sous Linux mais fonctionne-t-il sous WAMP ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-08 06:34:02845parcourir

Why Does My SoapClient Fail to Parse WSDL on Linux But Work on WAMP?

Erreur SOAP : analyse WSDL : impossible de charger à partir de l'URL WSDL

Question

Sur un serveur maître Linux, le SoapClient est incapable d'analyser le WSDL à partir d'une URL donnée, ce qui entraîne l'erreur : "SOAP-ERROR : Analyse WSDL : Impossible de charger depuis - mais fonctionne sur WAMP". Cependant, appeler l'URL directement ou utiliser curl à partir de la ligne de commande renvoie la réponse XML attendue.

Réponse

Chaîne d'agent utilisateur manquante :

Pour Dans certaines versions de PHP, SoapClient peut ne pas envoyer d'informations sur l'agent utilisateur HTTP par défaut. Cela peut entraîner des problèmes avec le service Web utilisé.

Solution :

Définir explicitement l'agent utilisateur à l'aide d'un flux contextuel :

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

Problèmes de service Web :

De plus, il a été découvert que le service Web en question rencontrait des problèmes avec les requêtes IPv6 sans chaîne d'agent utilisateur. Pour vérifier cela, essayez les commandes suivantes sur l'hôte Linux :

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

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

La requête IPv6 sans agent utilisateur échouera, tandis que toutes les autres requêtes réussiront. Cela suggère que l'hôte Linux résout le domaine du service Web en son adresse IPv6 et que SoapClient n'ajoutait pas de chaîne d'agent utilisateur par défaut.

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