【问题标题】:how to get new URL in a http 302 redirection in Java?如何在 Java 中的 http 302 重定向中获取新 URL?
【发布时间】:2011-10-01 14:39:08
【问题描述】:

我遇到了一个 HTTP 302 页面,上面写着 Location: //-now-playing.html(这看起来很奇怪,因为它通常是完整的 url,即 Location: @987654321@),这导致我的 HttpURLConnection concon.setFollowRedirects(true) 失败。然而,我的浏览器并没有因为这条指令而失败。在这种情况下如何获取 true URL?

在这种情况下,您可以通过在 www.web-sniffer.net 中尝试此 url http://cinemaclock.com/showtimes/ont/Toronto/43844/The_Trip 来查看完整的请求和响应。谢谢。

编辑:谢谢大家。我发现这是 URL 错误的情况。虚惊一场,谢谢大家。

【问题讨论】:

  • 它在 Chrome 12.0.742.112 中惨遭失败(“找不到 -now-playing.html 的服务器”)。您的浏览器必须比 Chrome 更擅长处理格式错误的 HTTP 响应:)

标签: java html http-status-code-302


【解决方案1】:

这是一个错误,您需要自己处理。您可以通过以下方式获取位置:

con.getHeaderField("Location");

【讨论】:

    【解决方案2】:

    首先,至少在我的计算机上,Safari 和 Chrome 在此重定向上都失败了,所以看起来最常见的行为只是返回错误并失败,这可能是您可能真正想要返回给用户的行为.

    如果您仍想插入正确的 URL 而不是失败,您可能必须对 Location: 重定向字段进行特殊情况解析以解决损坏的 URL。

    【讨论】:

      【解决方案3】:

      通过查看 Location: 标头的值,您做对了。

      很遗憾,您只是在这里得到了一个错误的 URL! :-(

      【讨论】:

      • 这是 Firefox 4.0.1 的版本。
      【解决方案4】:

      您可能只有一个糟糕的回报,或者您有一个绝对的位置重定向,没有它的主机名,在这里继续。

      虽然标准规定位置响应应该具有完整的 absoulteURI,但大多数浏览器和软件都可以毫无问题地处理相对位置响应。

      这个前面有两个正斜杠,这肯定是不好的形式,但是大多数服务器会自动假设 URL 中的两个 // 一起实际上只表示一个,所以如果你这样做,服务器通常会提供相同的页面是说要求http://www.xyz.com/index.html和要求http://www.xyz.com//index.html

      现在,为了解决您的问题,如果这确实意味着使用相对 URL 进行重定向,您将需要根据标头信息构建绝对 URL。首先,由于它的相对位置重定向可以肯定地说协议与您使用的 HTTP 相同,所以这是您应该尝试的 URL 的第一部分:

      http://

      您需要的下一部分是 HOSTNAME,它应该在 HTTP Header 响应的 HOST 变量中.. (www.xyz.com)

      http://www.xyz.com

      最后是路径,这就是标题的位置响应附加到上面的内容

      http://www.xyz.com/-now-playing.html

      最简单的测试方法是简单地启动浏览器并尝试查看该请求是否可以让您到达任何地方。对我来说,这看起来像是一个错误的 URL,因为 html 文件名以连字符开头,这是一种不寻常的形式,但我至少会尝试看看构建 URL 是否能给你带来一些好处。

      祝你好运。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-07
        • 2011-04-22
        • 2012-03-09
        • 1970-01-01
        • 2019-07-14
        • 1970-01-01
        • 2021-09-13
        • 1970-01-01
        相关资源
        最近更新 更多