301永久移动

时间:2013-08-25 16:57:32

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

我正在尝试通过Java在URL中获取HTML。但301 Moved Permanently就是我所拥有的一切。另一个URL工作。怎么了?这是我的代码:

 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


        }

6 个答案:

答案 0 :(得分:12)

您正面临重定向到其他网址的问题。这很正常,网站可能有很多理由重定向你。只需遵循基于“位置”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 client实现,例如Apache HTTP Client。他们中的大多数都能够自动跟踪重定向。

答案 1 :(得分:1)

发现这个答案很有用,并且由于可能出现多次重定向而有所改善(例如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;
                    }
                }

答案 2 :(得分:0)

您的代码没有任何问题。该消息表示hh.ru已永久移至另一个域。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

当我在服务器上运行特定文件时,我解决了我的问题。 而不是http://hh.ru, 我用了http://hh.ru/index.php。 它对我有用

答案 5 :(得分:0)

检查提供的URL是HTTP还是HTTPS,请考虑添加协议,如果您仅使用http(s)://domainname.com/resource-name之类的域名

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