Java 特定网络上Http GET上的服务器超时

Java 特定网络上Http GET上的服务器超时,java,http-get,socket-timeout-exception,Java,Http Get,Socket Timeout Exception,我正在尝试使用HttpURLConnection在Java中发出get请求。当我在家庭网络上时,响应为200,但在公司网络上,我收到连接超时错误(SocketTimeoutException)。我将超时更改为20秒,几秒钟后仍然收到此错误。当我在同一个网络上的浏览器中查看该链接时,该链接可用,因为我从Java代码中获得了超时,所以它可能仍然是防火墙问题?还是别的什么?这是我的密码: String USER_AGENT = "Mozilla/5.0"; URL obj = new

我正在尝试使用HttpURLConnection在Java中发出get请求。当我在家庭网络上时,响应为200,但在公司网络上,我收到连接超时错误(SocketTimeoutException)。我将超时更改为20秒,几秒钟后仍然收到此错误。当我在同一个网络上的浏览器中查看该链接时,该链接可用,因为我从Java代码中获得了超时,所以它可能仍然是防火墙问题?还是别的什么?这是我的密码:

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

这通常是由公司网络中的防火墙产生的错误。但是,如果您的浏览器能够访问internet,那么您的浏览器使用的是某种代理(可能是系统代理)。因此,必须通过标准参数化JVM,使其使用系统代理:

java -Djava.net.useSystemProxies=true ...
或者,找出哪些是系统代理参数(主机、端口、用户和密码),并将它们传递给JVM:

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

这通常是由公司网络中的防火墙产生的错误。但是,如果您的浏览器能够访问internet,那么您的浏览器使用的是某种代理(可能是系统代理)。因此,必须通过标准参数化JVM,使其使用系统代理:

java -Djava.net.useSystemProxies=true ...
或者,找出哪些是系统代理参数(主机、端口、用户和密码),并将它们传递给JVM:

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

贵公司提供代理吗?我没有很多代理经验。如果有必要,我相信他们会的,但如果我能在同一网络上的chrome浏览器中看到响应,这还会是一个问题吗?当然会。如果您指的是Windows上的Chrome,如IE/Edge,则它使用系统(Windows)代理设置,该设置可以通过WPAD和/或组策略自动设置,或者如果这是公司提供的计算机,则只需对其进行配置即可。如果公司网络需要使用HTTP代理,就像许多人出于各种各样的好或坏(以及丑陋!)的原因所做的那样,那么Chrome使用代理设置并工作,但Java不使用它,并且失败了。如果您不使用Windows,请指定您使用的是什么。您的公司是否提供代理?我对代理没有太多经验。如果有必要,我相信他们会的,但如果我能在同一网络上的chrome浏览器中看到响应,这还会是一个问题吗?当然会。如果您指的是Windows上的Chrome,如IE/Edge,则它使用系统(Windows)代理设置,该设置可以通过WPAD和/或组策略自动设置,或者如果这是公司提供的计算机,则只需对其进行配置即可。如果公司网络需要使用HTTP代理,就像许多人出于各种各样的好或坏(以及丑陋!)的原因所做的那样,那么Chrome使用代理设置并工作,但Java不使用它,并且失败了。如果您不在Windows上,请指定您所处的位置。