我正在抓几页。不时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);
答案 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