Heim > Artikel > Backend-Entwicklung > Warum kann mein SoapClient eine WSDL auf dem Produktionsserver nicht analysieren, funktioniert aber auf meinem lokalen 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!