У меня есть настройка задания cron на одном сервере для запуска сценария резервного копирования на PHP, который размещен на другом сервере. Команда, которую я использовал, имеет следующий формат:
curl -sS http://www.example.com/backup.php
В последнее время я получаю эту ошибку при запуске Cron
curl: (52) Empty reply from server
Я без понятия что это значит. Если я перейду по ссылке прямо в браузере, скрипт будет работать нормально, и я получу свой небольшой архивный zip-файл.
Кто-нибудь может предоставить информацию об этом?
curl
тайм-аут? Вы пытались увеличить время ожидания curl по умолчанию для подключения--connect-timeout <seconds>
и выполнения всей операции--max-time <seconds>
?Ответы:
Это может произойти, если curl попросят выполнить простой HTTP на сервере, который поддерживает HTTPS.
Пример:
источник
curl localhost:8443
дал мне пустую ошибку ответа.curl -k https://localhost:8443
правильно обслужил страницу.Curl выдает эту ошибку, когда от сервера нет ответа, поскольку HTTP не отвечает ни на что на запрос.
Я подозреваю, что проблема в том, что между вами и рассматриваемым хостом есть какая-то часть сетевой инфраструктуры, например брандмауэр или прокси. Следовательно, чтобы это заработало, вам потребуется обсудить проблему с людьми, ответственными за это оборудование.
источник
В моем случае это было перенаправление сервера;
curl -L
решил мою проблему.источник
Это может произойти, когда сервер не отвечает из-за 100% использования ЦП или памяти.
Я получил эту ошибку, когда пытался получить доступ к API sonarqube, но сервер не отвечал из-за полного использования памяти
источник
Другой распространенной причиной пустого ответа является тайм-аут. Проверьте все переходы, с которых выполняется задание cron, на ваш PHP / целевой сервер. Вероятно, где-то в строке есть устройство / сервер / nginx / LB / прокси, которое завершает запрос раньше, чем вы ожидали, что приводит к пустому ответу.
источник
В случае SSL-соединений это может быть вызвано проблемой в более старых версиях сервера nginx, которая отказала во время запросов curl и Safari. Эта ошибка была исправлена около версии 1.10 nginx, но в Интернете все еще есть много более старых версий nginx.
Для администраторов nginx: добавление
ssl_session_cache shared:SSL:1m;
вhttp
блок должно решить проблему.Я знаю, что OP запрашивал случай, отличный от SSL, но поскольку это верхняя страница в goole по проблеме «пустой ответ с сервера», я оставляю здесь ответ SSL, так как я был одним из многих, кто бился головой к стене с этим вопросом.
источник
В моем случае это было вызвано проблемой PHP APC. В первую очередь нужно посмотреть журналы ошибок Apache (если вы используете Apache).
Надеюсь, это кому-то поможет.
источник
эта ошибка также может произойти, если сервер обрабатывает данные. Обычно это случается со мной, когда я публикую файлы на веб-сайтах REST API, которые содержат много записей и требуют много времени для создания и возврата записей.
источник
вы можете попробовать этот curl -sS " http://www.example.com/backup.php ", поместив свой URL-адрес в "", который сработал для меня. Я не знаю точной причины, но я полагаю, что поместив URL-адрес в " "завершает запрос к серверу или просто завершает заголовок запроса.
источник
У меня была эта проблема раньше. Выяснилось, что у меня было другое приложение, использующее тот же порт (3000).
Легкий способ узнать это:
В терминале введите
netstat -a -p TCP -n | grep 3000
(замените порт, который вы используете, на «3000»). Если прослушивающих устройств несколько, значит, этот порт уже занят чем-то другим. Вы должны остановить этот процесс или изменить порт для нового процесса.источник
В моем случае (curl 7.47.0) это связано с тем, что я
content-length
вручную установил заголовок в команде curl со значением, которое рассчитывается почтальоном (я использовал почтальона для создания параметров команды curl и копирования их в оболочку). После удаления заголовкаcontent-length
нормально работает.источник
Попробуйте это -> Вместо того, чтобы проходить через cURL, попробуйте проверить связь с сайтом, который вы пытаетесь достичь, с помощью Telnet. Ответ, который возвращает ваша попытка подключения, будет именно тем, что cURL видит, когда пытается подключиться (но который он бесполезно скрывает от вас). Теперь, в зависимости от того, что вы здесь видите, вы можете сделать один из нескольких выводов:
Вы пытаетесь подключиться к веб-сайту, который является виртуальным хостом на основе имени, то есть к нему нельзя получить доступ через IP-адрес. Что-то пошло не так с именем хоста - возможно, вы что-то опечатали. Обратите внимание, что использование GET вместо POST для параметров даст вам более конкретный ответ.
Проблема также может быть связана с заголовком 100-continue. Попробуйте запустить
curl_getinfo($ch, CURLINFO_HTTP_CODE)
и проверьте результат.источник
telnet hostname
иGET <url>
Мой случай был связан с истечением срока действия сертификата SSL
источник
В моем случае я использовал uwsgi, добавил свойство http-timeout более 60 секунд, но он не работал из-за дополнительного места, а файл конфигурации не загружался должным образом.
источник
Это происходит, когда вы пытаетесь получить доступ к защищенному веб-сайту, например Https.
Надеюсь, ты пропустил 's'
Попробуйте изменить URL-адрес на curl -sS -u "username: password" https://www.example.com/backup.php
источник