Warum kann mein SOAP-Client bei einigen PHP-Versionen keine WSDL laden?

Barbara Streisand
Freigeben: 2024-11-08 19:59:02
Original
950 Leute haben es durchsucht

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

SOAP-FEHLER: Parsing WSDL: Konnte nicht geladen werden – Fehler

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.

Lösung

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();
}
Nach dem Login kopieren

Zusätzliche Erkenntnisse

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage