1

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

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

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

4

4 回答 4

1

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

con.getHeaderField("Location");
于 2011-07-08T21:11:24.333 回答
0

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

不幸的是,您在这里得到了一个错误的 URL!:-(

于 2011-07-08T21:10:31.170 回答
0

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

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

于 2011-07-08T21:11:54.517 回答
0

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

虽然标准规定位置响应应该具有完整的 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 是否能让你有所收获。

祝你好运。

于 2011-07-08T21:49:42.690 回答