【问题标题】:Catch all exceptions from network issues捕获网络问题的所有异常
【发布时间】:2014-03-08 11:22:36
【问题描述】:

我有一个程序尝试通过 JSoup 连接到 html 页面。我在 while 循环中有这段代码,目的是用至少 n 个元素填充地图。在几乎伪代码中它看起来像这样:

while(!myMap.hasFiveKeys){
    doc =JSoup.parse("http://www.website.com");
      wordMap.fillFrom(doc);
 }

我希望这个在一个 catch 块中,当 任何 网络相关异常被抛出时,我想增加一个计数器,然后我的 while 条件可以包含 connectionAttempts<10 以便如果连接失败 10 次就停止尝试(如果一开始没有成功,再尝试十次然后放弃)。

我不知道如何捕获所有与网络相关的异常。

【问题讨论】:

    标签: exception connection jsoup


    【解决方案1】:

    Connection.execute()(由get()post() 间接调用)记录了它在its Javadoc 中引发的所有异常。它们都是 IOException 的子类,所以你可以通过捕获 IOException 来捕获它们。

    要回答您问题的另一部分,您可以像这样将其置于重试循环中:

    int connectionAttempts = 0;
    while (map.size() < 5 || connectionAttempts < 10)
        try {
            Document d = Jsoup.connect(url).get();
            fillUpMap(d, map);
            //we connected successfully, reset the retry counter
            connectionAttempts = 0;
            if (map.size() < 5)
                /* ... pick a new url for next iteration ... */
        } catch (IOException e) {
            ++connectionAttempts;
        }
    

    实际上,您可能只想在超时或服务器错误(500 等)的情况下重试,在指示请求不会成功的 HTTP 状态代码(404、403、410 等)上提前停止,或者使用可配置的尝试次数。

    【讨论】:

      猜你喜欢
      • 2013-06-05
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      • 2013-03-14
      • 1970-01-01
      • 2018-11-01
      • 2011-11-09
      • 1970-01-01
      相关资源
      最近更新 更多