Подтвердить что ты не робот

Как я могу понять, почему cURL висит и не отвечает?

Я пытаюсь найти проблему с вызовом cURL в PHP. Он отлично работает в нашей тестовой среде, но не в нашей производственной среде. Когда я пытаюсь выполнить функцию cURL, она просто зависает и никогда не реагирует. Я пробовал сделать cURL-соединение из командной строки, и то же самое происходит.

Мне интересно, будет ли cURL регистрировать то, что происходит где-то, потому что я не могу понять, что происходит за время, когда команда сбивает и размахивает. Кто-нибудь знает, есть ли журнал, который отслеживает, что там происходит?

Я думаю, что это проблемы с подключением, но наш IT-парень настаивает, что я должен иметь доступ к нему без проблем. Есть идеи? Я запускаю CentOS и PHP 5.1.

Обновления: Используя подробный режим, я получил сообщение об ошибке 28 "Connect() Timed Out". Я попытался увеличить тайм-аут до 100 секунд и ограничить максимальное количество повторений до 5, без изменений. Я пробовал пинговать коробку, а также получил тайм-аут. Поэтому я собираюсь представить это обратно в ИТ и посмотреть, будут ли они смотреть на него снова. Спасибо за всю помощь, надеюсь, я вернусь через полчаса с новостями о том, что это их проблема.

Обновление 2:. Отключает мое поле, разрешая имя сервера с внешним IP-адресом. Когда ИТ дал мне внутренний IP-адрес, и я заменил его на вызов cURL, все отлично поработало. Спасибо всем за помощь.

4b9b3361

Ответ 1

В вашем php вы можете установить переменную CURLOPT_VERBOSE:

curl_setopt($curl, CURLOPT_VERBOSE, TRUE);

Затем он записывается в STDERR или в файл, указанный с помощью CURLOPT_STDERR (который принимает указатель файла):

curl_setopt($curl, CURLOPT_STDERR, $fp);

В командной строке вы можете использовать следующие переключатели:

  • --verbose сообщить дополнительную информацию в командной строке
  • --trace <file> или --trace-ascii <file> для трассировки в файл

Вы можете использовать --trace-time для добавления меток времени к подробным/выходным файлам

Ответ 3

Вы пытались установить CURLOPT_MAXREDIRS? Я обнаружил, что иногда будет некоторый "бесконечный" цикл переадресации для некоторых веб-сайтов, которые обычный пользователь браузера не видит.

Ответ 4

Если это вообще возможно, попробуйте sudo ing, когда пользователь работает под PHP (возможно, один Apache работает под).

Проблема curl может иметь различные причины, требующие ввода пользователя, например ненадежный сертификат, который хранится в кеге доверенных сертификатов пользователя root, но не в PHP. В этом случае команда будет ожидать ввода, который никогда не произойдет.

Обновление: Это применимо только в том случае, если вы используете curl externally с помощью exec - возможно, он не применяется.