2

失敗した後にphpでcurlリクエストを再試行する方法はありますか?タイムアウトした場合は約5回再試行したいのですが、これを行う方法がわかりません。curl_errno($ch)タイムアウトかどうかを確認してから、まったく新しいcurlリクエストを実行する必要がありますか、それとももっと簡単な方法がありますか?

4

1 に答える 1

4

cURLには定義済みのエラー コードがあり、ここで見つけることができます 。curl_errno で数値として返される必要があるため、28 の比較を使用してタイムアウトを確認できます。

28 が得られなくなるまでループすることをお勧めします。while を使用してこれを実行し、and を追加して、次のように制限に到達することもできます。

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

もちろん、curl fetch もループに追加する必要があります。はい、curl コマンドをもう一度実行する必要があると思います。また、 $limit++; の後などに再試行する前に、スリープを置くことをお勧めします。行の追加

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

これは CLI で使用されると想定しているため、スリープは問題にならないはずです。HTTP サーバーを攻撃したくないだけで、そのファイアウォール ルールなどを知らない可能性があります。

于 2013-07-28T02:57:04.540 に答える