2016-10-10 65 views
1

我想使用HttpURLConnection在Java中獲取請求。當我在我的家庭網絡上但在公司nework時,響應是200我得到連接超時錯誤(SocketTimeoutException)我將超時更改爲20秒,幾秒鐘後我仍然收到此錯誤。當我在瀏覽器中查看它時,鏈接是可用的,我從Java代碼中獲取超時,所以我仍然可能是防火牆問題?或者是其他東西?這是我的代碼:在特定網絡上的HTTP GET服務器超時

String USER_AGENT = "Mozilla/5.0"; 
    URL obj = new URL("http://jsonplaceholder.typicode.com/posts/1"); 
    HttpURLConnection con = (HttpURLConnection) obj.openConnection(); 
    con.setConnectTimeout(20000); 
    con.setRequestMethod("GET"); 
    con.setRequestProperty("User-Agent", USER_AGENT); 
    int responseCode = con.getResponseCode(); 
    System.out.println("GET Response Code :: " + responseCode); 
+0

您的公司提供代理嗎? – 0x44656e6e795279616e

+0

我沒有很多代理經驗。如果有必要,我肯定他們會這樣做,但是如果我可以在同一個網絡上的chrome瀏覽器中看到回覆,那麼它是否仍然是個問題? –

+2

它當然可以。如果您的意思是Windows上的Chrome,例如IE/Edge,則它使用可由WPAD和/或組策略自動設置的系統(Windows)代理設置,或者僅通過配置它爲公司提供的計算機。如果公司網絡需要使用HTTP代理,就像許多好的或壞的(和醜陋的!)原因一樣,然後Chrome使用代理設置並運行,但Java不會使用它並失敗。如果您不在Windows上,請指定您的位置。 –

回答

0

這通常是由您公司網絡中的防火牆產生的錯誤。但是,如果您的瀏覽器能夠訪問互聯網,那麼您的瀏覽器正在使用一些代理(可能是系統代理)。所以,你必須通過標準Java network properties以參數化的JVM,使其使用系統代理:

java -Djava.net.useSystemProxies=true ... 

,或者,找出哪些是系統代理參數(主機,端口,用戶名和密碼),並通他們到JVM:

java -Dhttp.proxyHost=... -Dhttp.proxyPort=...