javahtmlhttphttp-status-code-301

301 Moved Permanently


I'm trying to get HTML by URL in Java. But 301 Moved Permanently is all that I've got. Another URLs work. What's wrong? This is my code:

 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


        }

Solution

  • You're facing a redirect to other URL. It's quite normal and web site may have many reasons to redirect you. Just follow the redirect based on "Location" HTTP header like that:

    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);
    }
    

    Your browser is following redirects automaticaly, but using URLConnection you should do it by your own. If it bothers you take a look at other Java HTTP client implementations, like Apache HTTP Client. Most of them are able to follow redirect automatically.