如果在PHP中超时,请重试curl请求?

时间:2013-07-27 23:58:27

标签: php curl

有没有办法在失败后在php中重试curl请求,我希望它重试约5次,如果它超时但我不知道如何做到这一点。我应该使用curl_errno($ch)检查是否超时然后运行一个全新的卷曲请求,还是有更简单的方法来执行此操作?

1 个答案:

答案 0 :(得分:4)

cURL有预先定义的错误代码,您可以在此处找到它们:http://curl.haxx.se/libcurl/c/libcurl-errors.html 对于CURLE_OPERATION_TIMEDOUT,我们追求的是28。它应该在curl_errno上以数字形式返回,因此我们可以使用28比较来检查超时。

我建议你循环直到你没有得到28,你可以用while做同样的事情并添加一个并达到极限,就像这样

$limit  =   0;
while((curl_errno($ch) == 28 or $limit == 0) and $limit < 5){
    $limit++;
    // Run curl stuff
}

你当然应该在循环中添加你的curl提取。所以是的,我认为你需要再次运行curl命令。我还建议在重试$ limit ++之后再进行一次睡眠;添加行

if($limit > 0) sleep(1);

我假设这将在CLI上使用,因此睡眠应该不是问题。你只是不想锤击HTTP服务器,你可能不知道它的防火墙规则等等