2013-06-26 71 views
1

我正在使用CURL库进行POST,GET,下载和上传数据。由于某种原因,如果请求失败,我们计划再次重试请求。我们计划重试5次,即使失败,我们也会停止向用户显示失败消息。为此,我们以10秒的延迟循环运行。CURL请求失败重试方法

我的问题。

1)是我的方法,这是正确的。

2)什么是最佳实践。

UPDATE:

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    CURL *curl; 
    CURLcode res; 

    int nRetryCount = 0; 
    do 
    { 
     curl_global_init(CURL_GLOBAL_DEFAULT); 

     curl = curl_easy_init(); 
     if(curl) 
     { 
      curl_easy_setopt(curl, CURLOPT_URL, "http://www.google.com/"); 

      res = curl_easy_perform(curl); 

      curl_easy_cleanup(curl); 

      if(CURLE_OK == res) 
      { 
       break; 
      } 

      nRetryCount++; 

      if (nRetryCount < 5) 
      { 
       //wait for 10 sec. 
       Sleep(10000); 
      }  
     } 
    } while (nRetryCount < 5); 


    curl_global_cleanup(); 

    return 0; 
} 
+2

是否有任何代码来备份此问题?你有没有尝试过你的方法呢? – 2013-06-26 03:56:06

+0

5次后不起作用会发生什么?人们总是会问你为什么选择5?是随机的选择?我不太喜欢这些解决方案。我其实和你的问题一样。我认为首先你需要将'nRetryCount'设置为200或300的最大值。然后经过一定次数的运行后,你就可以猜出哪个是nRetryCount的最佳数字。大概需要20到30次重试才能连接。 –

回答

1

您已经更好地检查HTTP状态代码。

curl_easy_getinfo(curl, CURLINFO_HTTP_CODE, &http_status); 
if (http_status == ...) { 
    break; 
} 
+0

好的。感谢您的输入。如果失败了,我正在重试的方式是正确的? –

+0

我在想你可以使用do-loop进行retying。但我想你应该只重试你可能做的时间。 – mattn