2

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

4

1 回答 1

4

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

我建议你循环直到你没有得到 28,你可以用 while 来做到这一点,还可以添加一个 and 来达到限制,就像这样

$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 服务器,您可能不知道它的防火墙规则等

于 2013-07-28T02:57:04.540 回答