2013-06-26 121 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