@e-hot

Что не так происходит с сайтом, когда запрашиваешь его CURL-ом?

Приветствую.

Нужна помощь по следующей ситуации:
1. Ситуация: обращаюсь к каждому сайту, взятому из массива, через CURL ( в CURL установлены настройки - см. ниже ), чтобы получать для дальнейшей обработки код сайта, но на одном сайте CURL "зависает" и из-него весь скрипт не может закончиться.
Вот настройки CURL:
$ch = curl_init();
        curl_setopt( $ch, CURLOPT_URL, $url );
        curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
        curl_setopt( $ch, CURLOPT_BINARYTRANSFER, true );
        curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 20 );
        curl_setopt( $ch, CURLOPT_TIMEOUT, 20 );
        curl_setopt( $ch, CURLOPT_VERBOSE, true );
        curl_setopt( $ch, CURLOPT_NOPROGRESS, true );
        curl_setopt( $ch, CURLOPT_LOW_SPEED_LIMIT, 30 );
        curl_setopt( $ch, CURLOPT_LOW_SPEED_TIME, 20 );
        curl_exec( $ch );
        curl_close( $ch );


Вот что показывает сам CURL при обработке сайта, на котором стопориться весь общий процесс:
nazvanie-sayta-zamenil.ru
* Rebuilt URL to: nazvanie-sayta-zamenil.ru/
* Hostname was NOT found in DNS cache
*   Trying здесь приведен АйПи...
* Connected to nazvanie-sayta-zamenil.ru (АйПи) port 80 (#10)
> GET / HTTP/1.1
Host: nazvanie-sayta-zamenil.ru
Accept: */*

< HTTP/1.1 200 OK
< Date: Thu, 06 Jul 2017 09:13:54 GMT
< Content-Type: text/html; charset=windows-1251
< Transfer-Encoding: chunked
< Connection: keep-alive
< Keep-Alive: timeout=5
< Vary: Accept-Encoding
* Server Apache is not blacklisted
< Server: Apache
< Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=0
< Expires: Thu, 06 Jul 2017 09:13:54 GMT
< 
* Connection #10 to host nazvanie-sayta-zamenil.ru left intact


2. Вопрос:
что вообще происходит с сайтом, если смотреть вышеприведенные параметры? Как изменить имеющиеся настройки или добавить еще какие, чтобы CURL, заполучив какие-то проблемы с сайтом, просто бросал его и переходил к следующему сайту из массива? Другими словами, как настроить подключение к сайтам в CURL, чтобы CURL не зависал в собственном процессе, принудительно сбрасывал соединение и тем самым не превращал бы общий скрипт в скрипт не имеющий конца?

Спасибо.
  • Вопрос задан
  • 296 просмотров
Пригласить эксперта
Ответы на вопрос 3
@4iloveg
Full-Stack HTML Developer
Посмотри на библиотеку guzzle там скорее всего реализована обработка ошибок. И работа с сайтами проще будет.
Ответ написан
Комментировать
@e-hot Автор вопроса
Дополнительная информация по вопросу:
поэкспериментировал и обнаружил, что CURL "зависает" на сайтах, в заголовках которых присутствует:
< Transfer-Encoding: chunked

Что посоветуете для этого случая?
Ответ написан
Комментировать
@BorisKorobkov Куратор тега PHP
Web developer
Правильный вариант: Обновите CURL и PHP.

Неправильный:
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы