Как изменить время ожидания php curl, когда curl пытается разрешить хост (curl err_no 6) - PullRequest
5 голосов
/ 19 ноября 2010

Я выполняю запрос скручивания на странице. Я установил «CURLOPT_TIMEOUT» (до 6 секунд) и «CURLOPT_CONNECTTIMEOUT» (до 4 секунд) - и оба прекрасно работают для большинства URL.

Однако, когда веб-страница не отвечает (и, наконец, вызывает CURL через ошибку «Не удалось разрешить хост» (err_no 6)) - кажется, что «CURLOPT_TIMEOUT» не имеет никакого эффекта, и curl будет ждать, возможно, неопределенно или до истекает некоторое «другое» время ожидания.

С URL-адресом, к которому я пытаюсь получить доступ, CURL, кажется, всегда занимает ровно 15 секунд перед возвратом (что не имеет ничего общего с CURLOPT_TIMEOUT или CURLOPT_CONNECTTIMEOUT.

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

Ответы [ 3 ]

3 голосов
/ 19 ноября 2010

Ну, у вас там 3 таймаута.

  1. CURLOPT_TIMEOUT - сколько времени занимает вся операция
  2. CURLOPT_CONNECTTIMEOUT - сколько времени cURL ожидает ответа хостана его запрос
  3. Тайм-аут поиска DNS - что вы испытываете, DNS-запрос завершается неудачно и занимает определенное время, чтобы сделать это

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

2 голосов
/ 18 октября 2016

изменить время ожидания разрешения DNS перед использованием cURL

putenv('RES_OPTIONS=retrans:1 retry:1 timeout:1 attempts:1');
0 голосов
/ 14 ноября 2014

Фактически, CURLOPT_CONNECTTIMEOUT включает время запроса DNS. Проверено в php 5.4.9.

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