2015-09-25 64 views
-3

我運行一個簡單的Java程序獲得的HttpResponse代碼,但由於某種原因,不是所有的代碼正好是200,因爲檢查像www.reddit某些URL的網絡選項卡時,我覺得這很奇怪。 com,響應是200,但是我的程序正在返回一個不同的值。的HttpResponse代碼不是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重新獲得和連接?無論我是否擁有該代碼,我都會得到響應代碼,因爲連接執行openConnection();

目標 - 使所有有效連接返回200

+0

什麼是它打印,如果不是200? –

+0

@MattBall 301爲Reddit,302爲Facebook,但谷歌返回200.所有應該是200,如果您檢查在網絡選項卡 – Steveo90

+0

這是一個重定向。您的瀏覽器正在關注它們;你的代碼不是。我強烈建議使用HubSpot(我工作的公司)使用更好的HTTP客戶端庫,例如Apache的HttpClient或[Horizo​​n](https://github.com/HubSpot/horizo​​n)。 Java的內置HTTP支持對最終用戶來說並不好。 –

回答

3

你說,你看到的reddit的301和Facebook的302。 Those status codes mean that you're getting redirected.你的瀏覽器關注他們;你的代碼不是。

的Java內置的HTTP支持是不太適合最終用戶。我強烈建議使用更好的HTTP客戶端庫,如Apache's HttpClient,或Horizon,它是建立在Apache的頂部(同步要求)和李寧(用於異步)。


完全披露:我爲HubSpot工作; Horizo​​n是我們的開源庫之一。

1

這將是很好,如果您發佈的錯誤代碼,它確實給...

我跑你自己的代碼和錯誤是301,意思是被永久移動。

如果你去http://www.reddit.com自己,你會看到你重定向到reddit的HTTPS版本。在urlName中更改它可以解決您的問題。

編輯:這同樣適用於Facebook的,因爲我在評論你的問題看到,谷歌並不需要總是HTTPS,這樣做的工作。

相關問題