Curl повторный запрос после таймаута, как?

gauss_gauss

Постоялец
Регистрация
13 Окт 2011
Сообщения
97
Реакции
4
Всем привет!
Вопрос связан с работой cUrl

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

код вполне себе обычный

PHP:
$ch = curl_init($_POST['name']);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        // Получаем html
        $result = curl_exec($ch);
     
     
        //выведем ошибку, если есть
        if(curl_errno($ch))
                {
                        echo 'HTTP code:' . curl_getinfo($ch,CURLINFO_HTTP_CODE) . '<br>';
                        echo 'Curl error: ' . curl_error($ch);
                }
        curl_close($ch);

при этом хттп код 200, то есть соединение состоялось как я понимаю,
однако по истечении 7 секунд (мое значение $timeout), вылазит ошибка curl_error($ch) - ТАЙМАУТ
причем она вылазит от случая к случаю (парсинг выполняю с localhost'a)
каким образом можно повторить запрос cUrl к странице после этого таймаута n-ное количество раз?
и почему может вылазить вылазить ошибка, которая говорит о таймауте, ведь из браузера страница всегда открывается на ура и полностью без проблем!!
 
каким образом можно повторить запрос cUrl к странице после этого таймаута n-ное количество раз?
добавить цикл

PHP:
$all = 0;
for($i=0; $i<5; ++$i){
$ch = curl_init($_POST['name']);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
// Получаем html
$result = curl_exec($ch);


//выведем ошибку, если есть
if(curl_errno($ch))
{
echo 'HTTP code:' . curl_getinfo($ch,CURLINFO_HTTP_CODE) . '<br>';
echo 'Curl error: ' . curl_error($ch);
if(...тут проверка на ошибку, тайм аут, 404 и на любю другую ){
continue;
}
 
 }
 
break;
curl_close($ch);
}
Довольно топорно правда
 
внимайте мудрости, выдрал кусок рабочего кода:
PHP:
function browser($url) {
    $html = "";
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2");
 
    $html = curl_exec($ch);
    $info = curl_getinfo($ch);
    curl_close($ch);
 
    if (!($html)){
        sleep(15);
        $html = browser($url, $reffer);
    }
 
    return $html;
}
sleep(15) - задержка 15 секунд, можно поставить свое либо удалить
 
внимайте мудрости, выдрал кусок рабочего кода:
PHP:
function browser($url) {
    $html = "";
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2");
 
    $html = curl_exec($ch);
    $info = curl_getinfo($ch);
    curl_close($ch);
 
    if (!($html)){
        sleep(15);
        $html = browser($url, $reffer);
    }
 
    return $html;
}
sleep(15) - задержка 15 секунд, можно поставить свое либо удалить
не боишься, что процесс загнется от вечной рекурсии, при недоступности удаленного хоста? если ты его стартуешь по крону как-бы пофиг, а если он живет всегда - тогда ой
 
не боишься, что процесс загнется от вечной рекурсии, при недоступности удаленного хоста? если ты его стартуешь по крону как-бы пофиг, а если он живет всегда - тогда ой
ничто не вечно под луной (с)
 
Назад
Сверху