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
Libérer: 2024-11-08 06:34:02
original
885 Les gens l'ont consulté

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);
Copier après la connexion

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
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal