Как я могу определить, истек ли срок действия ручки cURL? - PullRequest
2 голосов
/ 01 января 2011

У меня есть скрипт, который соединяется с около 100 URL-адресами с помощью curl_multi _ *

Я использую curl_multi_getcontents, чтобы получить содержимое каждого дескриптора, но как определить, было ли соединение успешным?

1 Ответ

0 голосов
/ 01 января 2011

Я не знаю, как вы реализуете curl_multi, но этот скрипт, основанный на примере № 1 в php.net / manual / en / function.curl-multi-info-read.php , может помочь.Применимые изменения указываются в комментариях.

$urls = array(
   "http://example.com/",
   "http://qwe.rtyuiop.com/",
   "http://php.net/"
);

$mh = curl_multi_init();

foreach ($urls as $i => $url) {
    $conn[$i] = curl_init($url);
    curl_setopt($conn[$i], CURLOPT_RETURNTRANSFER, 1);
    curl_multi_add_handle($mh, $conn[$i]);
    // Set up info array:
    $multi_info[(integer) $conn[$i]]['url'] = $url;
}

do {
    $status = curl_multi_exec($mh, $active);
    $info = curl_multi_info_read($mh);
    if (false !== $info) {
        // Add connection info to info array:
        if (!$info['result']) {
            $multi_info[(integer) $info['handle']]['error'] = 'OK';
        } else {
            $multi_info[(integer) $info['handle']]['error'] = curl_error($info['handle']);
        }
    }
} while ($status === CURLM_CALL_MULTI_PERFORM || $active);

foreach ($urls as $i => $url) {
    $res[$i] = curl_multi_getcontent($conn[$i]);
    curl_close($conn[$i]);
}

// Display result messages:
foreach ($multi_info as $each) {
    echo $each['url'] . ' => ' . $each['error'] . "\n";
}

/**
Output:

http://example.com/ => OK
http://qwe.rtyuiop.com/ => Could not resolve host: qwe.rtyuiop.com; Host not found
http://php.net/ => OK 

**/

Если время передачи истекло, то сообщение для этого URL должно быть тем, которое соответствует CURLE_OPERATION_TIMEOUTED (int 28), что-то вроде «Тайм-аут операции. Указанное времяпериод был достигнут в соответствии с условиями "( curl.haxx.se / libcurl / c / libcurl-errors.html ).

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