【问题标题】:Server Timeout on Http GET on certain network特定网络上 Http GET 的服务器超时
【发布时间】:2016-10-10 13:16:18
【问题描述】:

我正在尝试使用 HttpURLConnection 在 Java 中发出获取请求。当我在我的家庭网络上时响应为 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);

【问题讨论】:

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

标签: java http-get socket-timeout-exception


【解决方案1】:

这通常是由贵公司网络中的防火墙产生的错误。但是,如果您的浏览器能够访问互联网,那么您的浏览器正在使用一些代理(可能是系统代理)。所以,你必须通过标准的Java network properties参数化JVM,让它使用系统代理:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-26
    • 2011-06-30
    • 2017-01-30
    • 2014-06-08
    • 1970-01-01
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    相关资源
    最近更新 更多