2016-06-19 30 views
0

我正在嘗試使用JSoup來獲取一些數據並將其寫入文件,但是我有一個需要的請求。有時我會收到404錯誤(即使是代理標題)。如何連續重試JSoup請求?

我該如何保持重試請求,直到它工作,並且只有在我知道它成功收到響應時才寫入文本文件?

我的代碼如下。

 for (String link : listOfLinks(doc)) { 
       try { 
        Document doc= Jsoup.connect(link).userAgent("Mozilla").get(); 

        Elements ps = doc.select("p"); 

        writeTextToFile(ps.text()); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 

我試過把它包裹在一個循環中,也許我沒有做到正確。任何幫助表示讚賞。

回答

0

如果您將代碼封裝在一個函數中,您可以在失敗時再次調用它。所以它可能看起來像這樣:

function GetData(){ 
    for (String link : listOfLinks(doc)) { 
      try { 
       Document doc= Jsoup.connect(link).userAgent("Mozilla").get(); 

       Elements ps = doc.select("p"); 

       writeTextToFile(ps.text()); 
      } catch (IOException e) { 
       e.printStackTrace(); 
       //Retry 
       GetData() 
      } 
     } 
    } 
    GetData()//Start the initial attempt 

這應該繼續運行,直到它沒有錯誤地工作。您也可以添加超時,以便在重試之前等待一秒左右,如果這會有所幫助的話。因此,而不是隻是:

//Retry 
GetData(); 

這將是:

//Retry after 1000 milliseconds 
setTimeout(GetData, 1000); 
+0

感謝您的答覆 – Carl

+0

不客氣!這對你有用嗎?那是你在找什麼? –

+0

恐怕這種方法會進入循環。 – DarkSkull