J'ai une configuration de travail cron sur un serveur pour exécuter un script de sauvegarde en PHP qui est hébergé sur un autre serveur. La commande que j'utilise est formatée comme ceci:
curl -sS http://www.example.com/backup.php
Dernièrement, j'ai eu cette erreur lorsque le Cron fonctionne
curl: (52) Empty reply from server
Je n'ai aucune idée de ce que cela signifie. Si je vais directement au lien dans mon navigateur, le script fonctionne bien et j'obtiens mon petit fichier zip de sauvegarde.
Quelqu'un peut-il fournir des informations à ce sujet?
curl
expiration du délai? Avez-vous essayé d'augmenter les attentes curl par défaut pour vous connecter--connect-timeout <seconds>
et pour que l'opération entière soit prise en charge--max-time <seconds>
?Réponses:
Cela peut se produire si curl est invité à faire du HTTP brut sur un serveur qui utilise HTTPS.
Exemple:
la source
curl localhost:8443
m'a donné l'erreur de réponse vide.curl -k https://localhost:8443
a servi la page correctement.Curl donne cette erreur lorsqu'il n'y a pas de réponse d'un serveur, car c'est une erreur pour HTTP de ne rien répondre à une requête.
Je soupçonne que le problème que vous rencontrez est qu'il existe une partie de l'infrastructure réseau, comme un pare-feu ou un proxy, entre vous et l'hôte en question. Par conséquent, pour que cela fonctionne, vous devrez discuter du problème avec les personnes responsables de ce matériel.
la source
Dans mon cas, c'était la redirection du serveur;
curl -L
résolu mon problème.la source
Cela peut se produire lorsque le serveur ne répond pas en raison d'une utilisation à 100% du processeur ou de la mémoire.
J'ai eu cette erreur lorsque j'essayais d'accéder à l'API sonarqube et que le serveur ne répondait pas en raison d'une utilisation complète de la mémoire
la source
Une autre raison courante pour une réponse vide est le délai d'expiration. Vérifiez tous les sauts à partir desquels la tâche cron s'exécute vers votre serveur PHP / cible. Il y a probablement un périphérique / serveur / nginx / LB / proxy quelque part le long de la ligne qui termine la demande plus tôt que prévu, ce qui entraîne une réponse vide.
la source
En cas de connexions SSL, cela peut être causé par un problème dans les anciennes versions du serveur nginx qui segfault lors des requêtes curl et Safari. Ce bogue a été corrigé autour de la version 1.10 de nginx mais il existe encore beaucoup d'anciennes versions de nginx sur Internet.
Pour les administrateurs nginx: l'ajout
ssl_session_cache shared:SSL:1m;
auhttp
bloc devrait résoudre le problème.Je suis conscient qu'OP demandait un cas non SSL, mais comme il s'agit de la première page de goole pour le problème de "réponse vide du serveur", je laisse la réponse SSL ici car j'étais l'un des nombreux à me cogner la tête contre le mur avec ce problème.
la source
Dans mon cas, cela a été causé par un problème PHP APC. Le premier endroit à regarder serait les journaux d'erreurs Apache (si vous utilisez Apache).
J'espère que cela aide quelqu'un.
la source
cette erreur peut également se produire si le serveur traite les données. Cela m'arrive généralement lorsque je publie des fichiers sur des sites Web d'API REST qui ont de nombreuses entrées et prennent du temps pour la création et le retour des enregistrements.
la source
vous pouvez essayer cette curl -sS " http://www.example.com/backup.php " en mettant votre URL dans "" qui a fonctionné pour moi je ne connais pas la raison exacte mais je suppose que mettre l'URL dans " "termine la demande au serveur ou termine simplement la demande d'en-tête.
la source
J'ai déjà eu ce problème. J'ai compris que j'avais une autre application utilisant le même port (3000).
Un moyen facile de le savoir:
Dans le terminal, tapez
netstat -a -p TCP -n | grep 3000
(remplacez le port que vous utilisez par le «3000»). S'il y a plus d'une écoute, quelque chose d'autre occupe déjà ce port. Vous devez arrêter ce processus ou modifier le port de votre nouveau processus.la source
Dans mon cas (curl 7.47.0), c'est parce que j'ai défini l'en-tête
content-length
sur la commande curl manuellement avec une valeur qui est calculée par postman (j'ai utilisé postman pour générer les paramètres de la commande curl et les copier dans le shell). Après avoir supprimé l'en-têtecontent-length
, cela fonctionne normalement.la source
Essayez ceci -> Au lieu de passer par cURL, essayez d'envoyer un ping au site que vous essayez d'atteindre avec Telnet. La réponse que votre tentative de connexion renvoie sera exactement ce que cURL voit quand il essaie de se connecter (mais qu'il dissimule inutilement de votre part). Maintenant, en fonction de ce que vous voyez ici, vous pourriez tirer l'une des nombreuses conclusions:
Vous essayez de vous connecter à un site Web qui est un hôte virtuel basé sur un nom, ce qui signifie qu'il ne peut pas être atteint via une adresse IP. Un problème est survenu avec le nom d'hôte. Vous avez peut-être mal saisi quelque chose. Notez que l'utilisation de GET au lieu de POST pour les paramètres vous donnera une réponse plus concrète.
Le problème peut également être lié à l'en-tête 100-continue. Essayez de courir
curl_getinfo($ch, CURLINFO_HTTP_CODE)
et vérifiez le résultat.la source
telnet hostname
etGET <url>
Mon cas était dû à l'expiration du certificat SSL
la source
Dans mon cas, j'utilisais uwsgi, j'ai ajouté la propriété http-timeout pendant plus de 60 secondes mais cela ne fonctionnait pas à cause d'un espace supplémentaire et le fichier de configuration ne se chargeait pas correctement.
la source
Cela se produit lorsque vous essayez d'accéder à un site Web sécurisé comme Https.
J'espère que tu as manqué 's'
Essayez de remplacer l'URL par curl -sS -u "nom d'utilisateur: mot de passe" https://www.example.com/backup.php
la source