Warning: file_get_contents(http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl): failed to open stream: HTTP request failed! HTTP/1.0 503 Service Unavailable
Rufen Sie die URL von der Befehlszeile aus auf
Aufrufen der URL von der Linux-Befehlszeile HTTP 200 wird mit einer XML-Antwort zurückgegeben
Was macht curl http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl Sagen Sie, wenn Sie es auf der Shell auf dem Linux-Server ausführen?
– ntaso
20. Februar 2014 um 18:20 Uhr
HTTP 200 und XML ist die Antwort
– Clark
20. Februar 2014 um 19:10 Uhr
Klingt nach einem Problem mit der Zeichenkodierung. Ist das WDSL in dem Zeichensatz codiert, den der SOAP-Client erwartet?
– GordonM
11. Juli 2017 um 9:07 Uhr
Ivar
Bei einigen PHP-Versionen sendet der SoapClient keine HTTP-User-Agent-Informationen. Welche PHP-Versionen haben Sie auf dem Server im Vergleich zu Ihrem lokalen WAMP?
Versuchen Sie, den Benutzeragenten explizit festzulegen, indem Sie einen Kontextstream wie folgt verwenden:
Es scheint tatsächlich einige Probleme mit dem von Ihnen verwendeten Webdienst zu geben. Die Kombination aus HTTP über IPv6 und fehlender Zeichenfolge des HTTP-Benutzeragenten scheint dem Webdienst Probleme zu bereiten.
Um dies zu überprüfen, versuchen Sie Folgendes auf Ihrem Linux-Host:
curl -A '' -6 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl
diese IPv6-Anforderung schlägt fehl.
curl -A 'cURL User Agent' -6 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl
Diese IPv6-Anforderung ist erfolgreich.
curl -A '' -4 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl
curl -A 'cURL User Agent' -4 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl
Beide IPv4-Anforderungen sind erfolgreich.
Interessanter Fall 🙂 Ich vermute, dass Ihr Linux-Host ec.europa.eu in seine IPv6-Adresse auflöst und dass Ihre Version von SoapClient standardmäßig keinen User-Agent-String hinzugefügt hat.
Sie sagen, die IPv6-Anforderung schlägt fehl, geben aber nicht an, wie. Wenn es mit einem 503-Statuscode fehlschlägt, lösche ich meine Antwort. Wo ich bin, heißt es Failed to connect to 2001:bc8:3408:200::2: Network is unreachable
– Walter Tross
23. Februar 2014 um 21:48 Uhr
Das ist richtig, die Anfrage schlägt mit a fehl HTTP/1.0 503 Service Unavailable. Der Textkörper der 503-Antwort lautet Erreur 503 Erreur proxy ipv6.
Es kann für jemanden hilfreich sein, obwohl es keine genaue Antwort auf diese Frage gibt.
Meine Seifen-URL hat einen nicht standardmäßigen Port (z. B. 9087), und die Firewall hat diese Anfrage blockiert, und ich habe jedes Mal diesen Fehler gemacht:
Ich habe den Port in der Firewall zugelassen und den Fehler behoben!
klugerama
Versuchen Sie, sich zu ändern
$client = new SoapClient('http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl', ['trace' => true]);
zu
$client = new SoapClient('http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl', ['trace' => true, 'cache_wsdl' => WSDL_CACHE_MEMORY]);
Überprüfen Sie auch (ob das funktioniert oder nicht), um sicherzustellen, dass dies der Fall ist /tmp von Ihrem Webserver beschreibbar ist und nicht voll ist.
@clarkk Kleinere Änderung (einfache Anführungszeichen hinzugefügt), sorry. Ist auch /tmp gut? Auch was bedeutet phpinfo() sage dir?
– Weisheiterama
21. Februar 2014 um 17:33 Uhr
Ein weiterer Gedanke: Könnte der Server auf https umleiten? Haben Sie Wireshark oder Fiddler für die Anfrage ausgeführt?
– Weisheiterama
21. Februar 2014 um 17:55 Uhr
Ich habe den Tippfehler mit einfachen Anführungszeichen gesehen 🙂 und es gibt keine Weiterleitung. Ich habe die Anfrage unter versucht www.web-sniffer.net
– Clark
21. Februar 2014 um 23:14 Uhr
Wie ich in meiner Frage geschrieben habe, kann ich die URL mit curl in der Befehlszeile aufrufen. Das muss eine Fehlkonfiguration in PHP sein … Auf dem alten Server mit Debian 6 und php5.3-etwas hat es funktioniert herum mit php.ini und es ist so ziemlich aus der Box
– Clark
21. Februar 2014 um 23:17 Uhr
Versuchen Sie, die openssl-Erweiterung in Ihrer php.ini zu aktivieren, wenn sie deaktiviert ist. Auf diese Weise konnte ich ohne zusätzliche Argumente auf den Webdienst zugreifen, dh
$client = new SoapClient(url);
@clarkk Kleinere Änderung (einfache Anführungszeichen hinzugefügt), sorry. Ist auch /tmp gut? Auch was bedeutet phpinfo() sage dir?
– Weisheiterama
21. Februar 2014 um 17:33 Uhr
Ein weiterer Gedanke: Könnte der Server auf https umleiten? Haben Sie Wireshark oder Fiddler für die Anfrage ausgeführt?
– Weisheiterama
21. Februar 2014 um 17:55 Uhr
Ich habe den Tippfehler mit einfachen Anführungszeichen gesehen 🙂 und es gibt keine Weiterleitung. Ich habe die Anfrage unter versucht www.web-sniffer.net
– Clark
21. Februar 2014 um 23:14 Uhr
Wie ich in meiner Frage geschrieben habe, kann ich die URL mit curl in der Befehlszeile aufrufen. Das muss eine Fehlkonfiguration in PHP sein … Auf dem alten Server mit Debian 6 und php5.3-etwas hat es funktioniert herum mit php.ini und es ist so ziemlich aus der Box
– Clark
21. Februar 2014 um 23:17 Uhr
Keines der oben genannten Dinge funktioniert für mich, also habe ich nach vielen Recherchen die wsdl-Datei vorab heruntergeladen, lokal gespeichert und diese Datei als ersten Parameter an SoapClient übergeben.
Erwähnenswert ist, dass file_get_contents($serviceUrl) eine leere Antwort für mich zurückgegeben hat, während die URL in meinem Browser einwandfrei geöffnet wurde. Das ist wahrscheinlich der Grund, warum SoapClient das wsdl-Dokument auch nicht laden konnte. Also habe ich es mit der PHP-Curl-Bibliothek heruntergeladen. Hier ist ein Beispiel
Was macht
curl http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl
Sagen Sie, wenn Sie es auf der Shell auf dem Linux-Server ausführen?– ntaso
20. Februar 2014 um 18:20 Uhr
HTTP 200 und XML ist die Antwort
– Clark
20. Februar 2014 um 19:10 Uhr
Klingt nach einem Problem mit der Zeichenkodierung. Ist das WDSL in dem Zeichensatz codiert, den der SOAP-Client erwartet?
– GordonM
11. Juli 2017 um 9:07 Uhr