2016-10-10 55 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=...