In diesem Fall stößt der Benutzer auf einen SOAP-Fehler, während er versucht, eine WSDL von einem zu konsumieren Webdienst. Der Fehler besagt insbesondere, dass der SOAP-Client die WSDL nicht von der angegebenen URL laden kann.
Der Schlüssel zur Lösung dieses Problems liegt im unterschiedlichen Verhalten von SOAP-Clients auf verschiedenen PHP-Versionen. Einige PHP-Versionen unterlassen das Senden von HTTP-Benutzeragenteninformationen, was zu Problemen beim Zugriffsversuch auf den Webdienst führt.
Hier ist eine Lösung, um den Benutzeragenten explizit mithilfe eines Kontextstroms festzulegen:
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(); }
Es ist erwähnenswert, dass das Problem auch auf Probleme mit dem Webdienst selbst zurückzuführen sein könnte. Beim Testen der URL mit Curl mit und ohne Benutzeragenten wurde festgestellt, dass IPv6-Anfragen ohne Benutzeragentenzeichenfolge fehlschlugen, während IPv4-Anfragen mit oder ohne Benutzeragentenzeichenfolge erfolgreich waren.
Diese Beobachtung deutet auf ein Kompatibilitätsproblem zwischen der Webdienst und die spezifische Konfiguration des Linux-Hosts des Benutzers.
Das obige ist der detaillierte Inhalt vonWarum kann mein SOAP-Client bei einigen PHP-Versionen keine WSDL laden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!