Maison > Article > développement back-end > Pourquoi mon client SOAP ne parvient-il pas à charger un WSDL sur certaines versions de PHP ?
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.
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(); }
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!