如何连续重试JSoup请求?

时间:2016-06-19 20:53:28

标签: java html jsoup http-status-code-404

我正在尝试使用JSoup来获取一些数据并将其写入文件,但是我有一个我需要的请求。有时我会收到404错误(即使使用代理标头)。

如何在请求重试之前继续重试该请求,并且只有在我知道它成功收到响应后才写入文本文件?

我的代码如下。

        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();
                }
            }

我试过将它包裹在一个循环中,也许我没有正确地做到这一点。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分: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);