如何在Java中使用http 302重定向获取新URL?

时间:2011-07-08 21:04:27

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

我遇到了一个HTTP 302页面,上面写着Location: //-now-playing.html(看起来很奇怪,因为通常它是完整的网址,即Location: http://www.somewhere.else),这导致HttpURLConnection con con.setFollowRedirects(true) {{1}} } 失败。然而,我的浏览器没有失败这条指令。在这种情况下,如何获得 true 网址?

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

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

4 个答案:

答案 0 :(得分:1)

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

con.getHeaderField("Location");

答案 1 :(得分:0)

通过查看Location:标题的值,您正在做正确的事。

不幸的是,你刚刚在这里收到了一个糟糕的网址! : - (

答案 2 :(得分:0)

首先,至少在我的计算机上,Safari和Chrome都在此重定向上失败,因此最常见的行为似乎只是返回错误并失败,这可能是您可能实际想要返回给用户的行为

如果您仍希望插入正确的URL而不是失败,则可能需要对Location:重定向字段进行特殊情况解析以解释损坏的URL。

答案 3 :(得分:0)

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

虽然标准表示位置响应应该具有完整的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是否能为你带来一些东西。

祝你好运。