HttpResponse代码不是200

时间:2015-09-25 19:42:58

标签: java

我正在运行一个简单的java程序来获取HttpResponse代码,但由于某些原因并非所有代码都恰好是200.我发现这很奇怪,因为在检查某些URL(如www.reddit.com)的网络选项卡时,响应是200,但我的程序返回了不同的值。

以下代码......

try{
        String urlName = "http://www.reddit.com";

        URL url = new URL(urlName);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");
        connection.connect();
        String message = connection.getResponseMessage();
        System.out.println("Message: " + message);
        int code = connection.getResponseCode();
        System.out.println(Integer.toString(code));
    }
    catch(Exception e){
        e.printStackTrace();
    }

最后,是否有理由将RequestMethod设置为GET并再次连接?我得到响应代码,无论我是否有该代码,因为连接执行openConnection();

目标 - 使所有有效连接返回200

2 个答案:

答案 0 :(得分:3)

你说你看到Reddit的301和Facebook的302。 Those status codes mean that you're getting redirected.您的浏览器正在关注他们;你的代码不是。

Java的内置HTTP支持对最终用户来说并不是很好。我强烈建议使用更好的HTTP客户端库,例如Apache's HttpClientHorizon,它建立在Apache(用于同步请求)和Ning(用于异步)之上。

完全披露:我为HubSpot工作; Horizo​​n是我们的开源库之一。

答案 1 :(得分:1)

如果您发布了它确实提供的错误代码,那就太好了。

我自己运行了代码,错误是301,意味着永久移动。

如果您自己转到http://www.reddit.com,您会看到您被重定向到reddit的httpS版本。在urlName中更改此项将解决您的问题。

编辑:对于Facebook也是如此,正如我在评论中看到的那样,谷歌并不总是需要https才能正常工作。