Maison  >  Article  >  développement back-end  >  Pourquoi mon client SOAP ne parvient-il pas à charger un WSDL sur certaines versions de PHP ?

Pourquoi mon client SOAP ne parvient-il pas à charger un WSDL sur certaines versions de PHP ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-08 19:59:02910parcourir

Why Does My SOAP Client Fail to Load a WSDL on Some PHP Versions?

SOAP-ERROR : Analyse du WSDL : Impossible de charger depuis - Erreur

Dans ce cas, l'utilisateur rencontre une erreur SOAP en essayant de consommer un WSDL à partir d'un service Internet. L'erreur indique spécifiquement que le client SOAP est incapable de charger le WSDL à partir de l'URL fournie.

La clé pour résoudre ce problème réside dans le comportement différent des clients SOAP sur les différentes versions de PHP. Certaines versions de PHP omettent d'envoyer les informations de l'agent utilisateur HTTP, ce qui entraîne des problèmes lors de la tentative d'accès au service Web.

Solution

Voici une solution pour définir explicitement l'agent utilisateur à l'aide d'un flux contextuel :

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

    $checkVatParameters = array(
        'countryCode' => 'DK',
        'vatNumber' => '47458714'
    );

    $result = $client->checkVat($checkVatParameters);
    print_r($result);
}
catch(Exception $e) {
    echo $e->getMessage();
}

Aperçu supplémentaire

Il convient de noter que le problème pourrait également être attribué à des problèmes avec le service Web. lui-même. En testant l'URL à l'aide de curl avec et sans agent utilisateur, il a été découvert que les requêtes IPv6 sans chaîne d'agent utilisateur échouaient tandis que les requêtes IPv4 avec ou sans chaîne d'agent utilisateur réussissaient.

Cette observation suggère un problème de compatibilité entre le service web et la configuration spécifique de l'hôte Linux de l'utilisateur.

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