这是一种可接受的方法来接近卷曲中的卷曲失败吗?什么是干法?

时间:2016-06-18 01:55:19

标签: php curl

我正在抓几页。不时curl抛出连接重置错误。我猜它与坏包有关。

我写了一个试图卷曲uri的函数,如果它失败了,在睡眠后再试一次,那么再试一次。如你所见,我在那里重复一些代码。如果是在里面的话。这是正常/可接受的吗?我知道有时互联网可以辍学几分钟,所以也许我希望它不会尝试1或2次,但是例如20次。什么是更干燥的方法?即当curl_errno为真时,则继续重复x次?

// {all the headers and options here}

$result = curl_exec($ch);

if(curl_errno($ch)) {
    sleep(1);

    // try again
    $result = curl_exec($ch);

    if(curl_errno($ch)) {
        sleep(2);

        // try again
        $result = curl_exec($ch);

        if(curl_errno($ch)) {
            // stop trying, save to fails db for later debug
        }
    }
}

curl_close($ch);

1 个答案:

答案 0 :(得分:1)

在这种情况下,

递归会派上用场:

function loadData($ch, $retries) {
    $result = curl_exec($ch);

    if(curl_errno($ch)) {
        if ($retries > 0) {
            sleep(1);

            // try again
            return loadData($ch, $retries - 1);
        } else {
            // stop trying, save to fails db for later debug
            return FAIL;
        }
    } else return $result;
}

$result = loadData($ch, 20) // retry up to 20 times