301永久搬家

问题描述 投票:0回答:7

我正在尝试通过 Java 中的 URL 获取 HTML。但

301 Moved Permanently
就是我所拥有的一切。其他网址有效。怎么了?这是我的代码:

 hh= new URL("http://hh.ru");
        in = new BufferedReader(
                new InputStreamReader(hh.openStream()));


        while ((inputLine = in.readLine()) != null) {

            sb.append(inputLine).append("\n");
            str=sb.toString();//returns 301


        }
java html http http-status-code-301
7个回答
22
投票

您面临着重定向到其他 URL 的情况。这是很正常的,网站可能有很多原因来重定向您。只需遵循基于“位置”HTTP 标头的重定向即可:

URL hh= new URL("http://hh.ru");
URLConnection connection = hh.openConnection();
String redirect = connection.getHeaderField("Location");
if (redirect != null){
    connection = new URL(redirect).openConnection();
}
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
System.out.println();
while ((inputLine = in.readLine()) != null) {
    System.out.println(inputLine);
}

您的浏览器会自动跟踪重定向,但使用 URLConnection 您应该自己进行重定向。如果它困扰您,请查看其他Java HTTP 客户端 实现,例如 Apache HTTP 客户端。他们中的大多数都能够自动遵循重定向。


2
投票

发现这个答案很有用,并且由于可以进行多次重定向(例如 307 然后 301)而有所改进。

URLConnection urlConnection = url.openConnection();
                String redirect = urlConnection.getHeaderField("Location");
                for (int i = 0; i < MAX_REDIRECTS ; i++) {
                    if (redirect != null) {
                        urlConnection = new URL(redirect).openConnection();
                        redirect = urlConnection.getHeaderField("Location");
                    } else {
                        break;
                    }
                }

1
投票

您的代码没有任何问题。该消息意味着

hh.ru
已永久移动到另一个域。


0
投票

我测试了你的代码,没问题,但是当我使用“hh.ru”时,与你的问题相同,当我使用lynx(命令行浏览器)连接到“hh.ru”时,它会告诉我它正在重定向到另一个网址,然后向我显示它已永久移动,之后出现此警报:
“警告!:此客户端不支持 HTTPS URL”


0
投票

检查提供的 URL 是 HTTP 还是 HTTPS,如果您仅使用域名(例如

http(s)://domainname.com/resource-name

),请考虑添加协议

阅读:https://en.wikipedia.org/wiki/HTTP_301


0
投票

当我将特定文件放在服务器上运行时,我解决了我的问题。 而不是

http://hh.ru
, 我用过
http://hh.ru/index.php
。 它对我有用


0
投票

几个月来,www.giogamer.com 对我开放。我已经注册了,但在另一个网站https://iranwushufed.ir/注册并输入我的国家代码卡号后,www.giogamer.com打开了。我应该怎么做才能打开它并修复它?

© www.soinside.com 2019 - 2024. All rights reserved.