Как я могу понять, почему cURL зависает и не отвечает? - PullRequest
13 голосов
/ 13 мая 2010

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

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

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

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

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

Ответы [ 4 ]

16 голосов
/ 13 мая 2010

В вашем 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, чтобы добавить метки времени к подробным / файловым выводам

0 голосов
/ 13 мая 2010

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

0 голосов
/ 13 мая 2010

Вы также можете использовать curl_getinfo () для получения информации о вашем конкретном переводе.

http://in.php.net/manual/en/function.curl-getinfo.php

0 голосов
/ 13 мая 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...