【问题标题】:What is the "system default" http timeout?什么是“系统默认”http超时?
【发布时间】:2018-09-01 05:42:47
【问题描述】:

我试图找出 Apache HttpClient 的超时时间。 doc文件*说http连接的默认超时是“系统默认”超时。但是什么是“系统默认值”?以及如何找出“系统默认”超时设置的值?

*"超时值为零被解释为无限超时。负值被解释为未定义(系统默认)。

默认值:-1"(https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/client/config/RequestConfig.html#getConnectTimeout())

【问题讨论】:

标签: java apache http apache-httpclient-4.x


【解决方案1】:

在这种特殊情况下,系统默认值意味着 Java 运行时设置的任何套接字超时值。如果未定义套接字超时配置参数,HttpClient 不会尝试控制连接套接字上的 SO_TIMEOUT 设置。

【讨论】:

    【解决方案2】:

    根据documentation,http.socket.timeout参数控制SO_TIMEOUT值

    与

    可以通过HttpClient的setParameter()方法设置默认超时时间,

    HttpClient httpclient = new HttpClient();
    httpclient.getParams().setParameter("http.protocol.version",HttpVersion.HTTP_1_1);
    httpclient.getParams().setParameter("http.socket.timeout", new Integer(1000));
    httpclient.getParams().setParameter("http.protocol.content-charset", "UTF-8");
    

    【讨论】:

    • 文档说“http.socket.timeout”默认也是未定义的。那么 HttpClient 的默认超时时间是多少?我很确定 HttpClient 的反应不能是未定义的(随机)。
    • 这似乎无法编译,因为 HttpClient 是一个接口而不是一个类。 (并且不推荐使用 getParams())
    • 您必须设置参数“http.socket.timeout”并给予时间。
    • 是否可以全局设置此值,以便影响所有 HttpClient 实例? (用作所有 HttpClient 实例的默认值,而不是内置默认值)。还是必须在每个 HttpClient 上单独设置?
    猜你喜欢
    • 2015-06-21
    • 2019-12-04
    • 1970-01-01
    • 2014-10-23
    • 2020-11-08
    • 2015-10-29
    • 1970-01-01
    • 2016-04-16
    相关资源
    最近更新 更多