【问题标题】:cURL retry in PHPPHP中的cURL重试
【发布时间】:2011-08-30 03:18:10
【问题描述】:

是否可以在 PHP cURL 中设置超时重试选项?

我知道我可以通过对其进行编码以重试失败来做到这一点,只是想知道是否有某种方法可以通过一个选项来做到这一点。

【问题讨论】:

标签: php curl libcurl


【解决方案1】:

您可以像这样使用 errno 重试:

$curl = curl_init();
curl_setopt_array($curl, $options);
$response = curl_exec($curl);
$retry = 0;
while(curl_errno($curl) == 28 && $retry < 3){
    $response = curl_exec($curl);
    $retry++;
}

$error_codes=array(
    [1] => 'CURLE_UNSUPPORTED_PROTOCOL', 
    [2] => 'CURLE_FAILED_INIT', 
    [3] => 'CURLE_URL_MALFORMAT', 
    [4] => 'CURLE_URL_MALFORMAT_USER', 
    [5] => 'CURLE_COULDNT_RESOLVE_PROXY', 
    [6] => 'CURLE_COULDNT_RESOLVE_HOST', 
    [7] => 'CURLE_COULDNT_CONNECT', 
    [8] => 'CURLE_FTP_WEIRD_SERVER_REPLY',
    [9] => 'CURLE_REMOTE_ACCESS_DENIED',
    [11] => 'CURLE_FTP_WEIRD_PASS_REPLY',
    [13] => 'CURLE_FTP_WEIRD_PASV_REPLY',
    [14]=>'CURLE_FTP_WEIRD_227_FORMAT',
    [15] => 'CURLE_FTP_CANT_GET_HOST',
    [17] => 'CURLE_FTP_COULDNT_SET_TYPE',
    [18] => 'CURLE_PARTIAL_FILE',
    [19] => 'CURLE_FTP_COULDNT_RETR_FILE',
    [21] => 'CURLE_QUOTE_ERROR',
    [22] => 'CURLE_HTTP_RETURNED_ERROR',
    [23] => 'CURLE_WRITE_ERROR',
    [25] => 'CURLE_UPLOAD_FAILED',
    [26] => 'CURLE_READ_ERROR',
    [27] => 'CURLE_OUT_OF_MEMORY',
    [28] => 'CURLE_OPERATION_TIMEDOUT',
    ....

【讨论】:

  • 最好使用do {} while()来避免代码重复(以防循环体包含多行逻辑)
  • 如果问题仍然存在,最好在循环中添加sleep($delay),以增加在重试之间清除网络拥塞的机会。
【解决方案2】:

不适用于 PHP cURL 扩展的当前可用选项。在命令行上,我相信有 --retry 选项,但它没有暴露给 PHP。

【讨论】:

    猜你喜欢
    • 2020-11-24
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-18
    • 2020-02-10
    相关资源
    最近更新 更多