CURLOPT_TIMEOUT, есть функция "еще"? - PullRequest
1 голос
/ 15 февраля 2011
    <?php
function get_random_proxy()
{
    srand ((double)microtime()*1000000);
    $f_contents = file ("proxy.txt");
    $line = $f_contents[array_rand ($f_contents)];
    return $line;
}
$proxy = get_random_proxy(); 
            $ch = curl_init(); 
            curl_setopt($ch, CURLOPT_URL, "example.com");
            curl_setopt($ch, CURLOPT_PROXY,$proxy); 
            curl_setopt($ch, CURLOPT_TIMEOUT ,30);
            curl_exec($ch);  
            curl_close($ch);      
    ?>

curl закроет соединение, если не сможет подключиться в течение 30 секунд.

Как видите, я использую список прокси. однако, некоторые прокси-ips иногда имеют проблемы с подключением в течение 30 секунд, и curl закрывает соединение, когда не удается загрузить в течение 30 секунд.

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

отредактировано для @rubayeet. добавлена ​​новая функция прокси

Ответы [ 3 ]

4 голосов
/ 15 февраля 2011

Вам просто нужно использовать curl_errno, чтобы проверить, произошло ли CURLE_OPERATION_TIMEDOUT

1 голос
/ 15 февраля 2011
function get($url, $proxy){
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_PROXY,$proxy); 
    curl_setopt($ch, CURLOPT_TIMEOUT ,30);
    $response = curl_exec($ch);  
    curl_close($ch);

    return $response
}

$url = 'example.com';

while(true) {
   $proxy = get_random_proxy();
   $response = get($url, $proxy);
   if ($response === False) continue;
   else break;
}

//do something with $response
0 голосов
/ 15 февраля 2011

Вы должны создать новый сеанс curl для подключения к другому прокси.Так что поместите цикл foreach вокруг вашего кода и цикл через прокси-массив.

Также вы можете использовать curl_errno () и curl_error () для проверки на наличие ошибки (например, вашего таймаута).было бы полезно установить CURLOPT_RETURNTRANSFER и загрузить его в переменную для изменения или работы с ним.

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