【问题标题】:Set maximum number of server redirects followed when using HttpURLConnection设置使用 HttpURLConnection 时遵循的最大服务器重定向数
【发布时间】:2011-06-14 02:25:21
【问题描述】:

有没有办法规定使用 HttpURLConnection 时遵循的最大重定向次数?

        HttpURLConnection conn = (HttpURLConnection) uri.getURI().toURL();
        conn.connect();

我只能看到启用/禁用重定向的选项

conn.setFollowRedirects(true)

我想将最大关注设置为 3(似乎默认为 20),以防止出现这样的异常:

java.net.ProtocolException: Server redirected too many  times (20)

这是由某些服务器上的循环重定向引起的。

【问题讨论】:

    标签: java http url


    【解决方案1】:

    为什么不直接捕获异常?更改阈值数字不会改变函数在超过该数字时必须向您报告失败的事实。事实上,降低阈值会增加函数在复杂但合法的重定向情况下必须报告失败的机会,而它最终会以更高的阈值成功。

    【讨论】:

    • 我已经这样做了。我想限制重定向数量的原因更多地与效率有关。为什么要跟踪重定向 20 次?如果我一次爬取 1000 个网站并且不需要这个,那是浪费时间。另外,没有这个选项似乎很奇怪。
    【解决方案2】:

    你可以试试http.maxRedirects属性:

    System.setProperty("http.maxRedirects", "3");

    【讨论】:

    • 谢谢,它有效。虽然该属性仅在启动时读取一次,因此需要使用“-Dhttp.maxRedirects=3”将其设置为运行时属性
    • @Joel 实际上在http调用之前设置这个参数就足够了,例如在一些初始化方法中
    • @VitaliiFedorenko 你怎么知道的?
    【解决方案3】:

    根据HTTP RFC

    用户代理不应该 自动重定向请求更多 超过 5 次,因为这样的重定向 通常表示无限循环。

    This forum post explains如何解决这个问题

    【讨论】:

      猜你喜欢
      • 2010-12-25
      • 1970-01-01
      • 2011-02-04
      • 2015-10-26
      • 1970-01-01
      • 1970-01-01
      • 2017-04-19
      • 2016-10-13
      相关资源
      最近更新 更多