it-swarm.com.de

Curl-Fehler 52 Leere Antwort vom Server

Ich habe ein Cron-Job-Setup auf einem Server, um ein Backup-Skript in PHP auszuführen, das auf einem anderen Server gehostet wird. Der Befehl, den ich verwendet habe, ist folgendermaßen formatiert:

curl -sS http://www.example.com/backup.php

In letzter Zeit habe ich diese Fehlermeldung erhalten, wenn der Cron läuft

curl: (52) Empty reply from server

Ich habe keine Ahnung, was das bedeutet. Wenn ich direkt in meinem Browser auf den Link gehe, läuft das Skript einwandfrei und ich bekomme meine kleine Zip-Sicherungsdatei.

Kann jemand irgendwelche Informationen darüber geben?

53
Paul Sheldrake

Curl gibt diesen Fehler aus, wenn von einem Server keine Antwort erfolgt, da es ein Fehler ist, wenn HTTP nichts auf eine Anforderung antwortet.

Ich vermute, das Problem, das Sie haben, ist, dass sich zwischen Ihnen und dem betreffenden Host ein Teil der Netzwerkinfrastruktur befindet, beispielsweise eine Firewall oder ein Proxy. Um dies zu erreichen, müssen Sie das Problem daher mit den für diese Hardware Verantwortlichen besprechen.

39
Steve Knight

Dies kann passieren, wenn curl aufgefordert wird, reines HTTP auf einem Server auszuführen, der HTTPS ausführt.

Beispiel:

$ curl http://google.com:443
curl: (52) Empty reply from server
35
Benoit Duffez

Dies kann passieren, wenn der Server aufgrund von 100% CPU- oder Speicherauslastung nicht reagiert.

Ich habe diese Fehlermeldung erhalten, als ich versuchte, auf die Sonarqube-API zuzugreifen, und der Server hat aufgrund der vollen Speicherauslastung nicht reagiert

5
Jayaprakash

In meinem Fall wurde dies durch ein PHP APC-Problem verursacht. Zuerst sollten Sie die Apache-Fehlerprotokolle betrachten (wenn Sie Apache verwenden).

Hoffe das hilft jemandem.

3
Andrew McCombe

In meinem Fall war es eine Serverumleitung. curl -L hat mein Problem gelöst.

3

Dies geschieht, wenn Sie versuchen, auf eine sichere Website wie Https zuzugreifen.

Ich hoffe du hast 's verpasst'

Versuchen Sie, die URL in curl -sS zu ändern - u "Benutzername: Kennwort" https://www.example.com/backup.php

2
Muthukrishnan

Ein weiterer häufiger Grund für eine leere Antwort ist das Zeitlimit. Überprüfen Sie alle Hops, von denen aus der Cron-Job ausgeführt wird, zu Ihrem PHP-/Zielserver. Es gibt wahrscheinlich irgendwo entlang der Zeile ein Gerät/Server/nginx/LB/Proxy, das die Anforderung früher als erwartet abbricht, was zu einer leeren Antwort führt.

2

Bei SSL-Verbindungen kann dies auf Probleme in älteren Versionen des Nginx-Servers zurückzuführen sein, die bei Curl- und Safari-Anforderungen auftreten. Dieser Fehler wurde um Version 1.10 von Nginx behoben, aber es gibt noch viele ältere Versionen von Nginx im Internet.

Für Nginx-Administratoren: Das Hinzufügen von ssl_session_cache shared:SSL:1m; zum Block http sollte das Problem lösen.

Ich bin mir bewusst, dass OP nach einem Nicht-SSL-Fall gefragt hat, aber da dies die oberste Seite in Goole für das Problem "Leere Antwort vom Server" ist, lasse ich die SSL-Antwort hier, da ich eine von vielen war Ich schlug mit dem Kopf gegen die Wand.

2
SiliconMind

Ich hatte dieses Problem schon einmal. Ich habe herausgefunden, dass ich eine andere Anwendung hatte, die den gleichen Port (3000) verwendete. 

Einfache Möglichkeit, dies herauszufinden:

Geben Sie im Terminal netstat -a -p TCP -n | grep 3000 ein (ersetzen Sie den '3000' durch den von Ihnen verwendeten Port). Wenn mehr als eine zu hören ist, belegt dieser Port bereits etwas anderes. Sie sollten diesen Prozess anhalten oder den Port für Ihren neuen Prozess ändern.

1
ginna

sie können diese curl -sS " http://www.example.com/backup.php " ausprobieren, indem Sie Ihre URL in "" setzen, die für mich funktionierte. Ich kenne den genauen Grund aber nicht Nehmen Sie an, dass das Einfügen der URL in "" die Anforderung an den Server oder die Kopfanforderung abschließt.

1
omar

In meinem Fall (curl 7.47.0) habe ich den Header content-length im Befehl curl manuell mit einem Wert gesetzt, der vom Postboten berechnet wird (ich habe den Befehl postman verwendet, um Parameter für curl zu generieren und sie in die Shell zu kopieren). Nachdem ich den Header content-length gelöscht habe, funktioniert er normal.

0
YouCL

In meinem Fall habe ich uwsgi verwendet und die Eigenschaft http-timeout für mehr als 60 Sekunden hinzugefügt, sie funktionierte jedoch nicht, da zusätzlicher Speicherplatz zur Verfügung stand und die Konfigurationsdatei nicht richtig geladen wurde.

0
Ankit Adlakha

Versuchen Sie this -> Anstatt cURL zu durchlaufen, versuchen Sie, die Site, die Sie mit Telnet erreichen möchten, mit einem Ping zu versehen. Die Antwort, die Ihr Verbindungsversuch zurückgibt, ist genau das, was cURL sieht, wenn es versucht, eine Verbindung herzustellen (was jedoch von Ihnen unwirksam verschleiert wird). Abhängig davon, was Sie hier sehen, ziehen Sie möglicherweise eine von mehreren Schlussfolgerungen:

Sie versuchen, eine Verbindung zu einer Website herzustellen, die einen namenbasierten virtuellen Host ist. Dies bedeutet, dass er nicht über die IP-Adresse erreichbar ist. Beim Hostnamen ist ein Fehler aufgetreten. Möglicherweise haben Sie etwas falsch geschrieben. Beachten Sie, dass die Verwendung von GET anstelle von POST für Parameter eine genauere Antwort ergibt.

Das Problem kann auch an den 100-Continue-Header gebunden sein. Führen Sie curl_getinfo($ch, CURLINFO_HTTP_CODE) aus und überprüfen Sie das Ergebnis.

0
Felix