Heim  >  Artikel  >  Backend-Entwicklung  >  Warum kann mein SoapClient eine WSDL auf dem Produktionsserver nicht analysieren, funktioniert aber auf meinem lokalen Server?

Warum kann mein SoapClient eine WSDL auf dem Produktionsserver nicht analysieren, funktioniert aber auf meinem lokalen Server?

Barbara Streisand
Barbara StreisandOriginal
2024-11-09 20:50:02375Durchsuche

Why does my SoapClient fail to parse a WSDL on the production server but works on my local server?

SOAP-Fehler: Parsen von WSDL auf Produktionsserver

Beim Versuch, einen SoapClient zum Parsen einer WSDL von einer Remote-URL zu verwenden, wird ein SOAP- Auf einem Produktionsserver ist ein FEHLER aufgetreten. Der lokale WAMP-Server hat den Vorgang erfolgreich abgewickelt, aber das Problem blieb auf dem Produktionsserver bestehen.

Fehlermeldung

Die spezifische Fehlermeldung lautete:

SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl' : failed to load external entity "http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl"/taxation_customs/vies/checkVatService.wsdl"

Untersuchung

Bei weiteren Untersuchungen wurde festgestellt, dass der Fehler darauf zurückzuführen war, dass der SoapClient die WSDL nicht analysieren konnte, als er versuchte, sie von der URL zu laden. Dies geschah, obwohl auf die WSDL über einen direkten Aufruf mit Curl über die Befehlszeile zugegriffen werden konnte.

Lösung

Das Problem wurde gelöst, indem der Benutzeragent explizit im SoapClient festgelegt wurde Verwendung eines Kontextstroms:

$soapClientOptions = array(
    'stream_context' => $context,
    'cache_wsdl' => WSDL_CACHE_NONE
);

$client = new SoapClient($wsdlUrl, $soapClientOptions);

Dieser Ansatz stellte sicher, dass die erforderlichen HTTP-Benutzeragenteninformationen in der Anfrage enthalten waren, sodass der SoapClient die WSDL erfolgreich von der Remote-URL analysieren konnte.

Zusätzliche Erkenntnisse

Weitere Analysen ergaben, dass das Problem auch auf bestimmte Einstellungen auf dem Produktionsserver zurückzuführen sein könnte. HTTP-Anfragen über IPv6 mit einer fehlenden HTTP-Benutzeragentenzeichenfolge schienen den Fehler auszulösen. Durch das Erzwingen von IPv4 oder die explizite Angabe einer Benutzeragentenzeichenfolge konnte die Anfrage erfolgreich ausgeführt werden, ohne dass der SOAP-Fehler auftrat.

Das obige ist der detaillierte Inhalt vonWarum kann mein SoapClient eine WSDL auf dem Produktionsserver nicht analysieren, funktioniert aber auf meinem lokalen Server?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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