【问题标题】:How do I continuously retry a JSoup request?如何不断重试 JSoup 请求?
【发布时间】:2016-10-21 01:43:41
【问题描述】:

我正在尝试使用 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();
                }
            }

我试过把它包裹在一个循环中,也许我做得不对。任何帮助表示赞赏。

【问题讨论】:

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


    【解决方案1】:

    如果您将代码包装在一个函数中,您可以在它失败时再次调用它。所以它可能看起来像这样:

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

    【讨论】:

    • 感谢回复
    • 不客气!这对你有用吗?那是你要找的吗?
    • 我担心这种方法会陷入循环。
    • 这不是@DarkSkull 的想法吗?一直循环直到成功。如果成功,它会停止。
    猜你喜欢
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    相关资源
    最近更新 更多