3

我的问题是,如果我没有指定,使用 DefaultHttpClient 发出的请求的默认超时是多少。

所以如果没有这样的代码

HttpParams my_httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(my_httpParams, 3000);
HttpConnectionParams.setSoTimeout(my_httpParams, 1);

只是

HttpParams params = new BasicHttpParams();
        HttpProtocolParams.setContentCharset(params,
                HTTP.DEFAULT_CONTENT_CHARSET);
ClientConnectionManager cm = new ThreadSafeClientConnManager(params,
                schemeRegistry);
SchemeRegistry schemeRegistry = new SchemeRegistry();
        schemeRegistry.register(new Scheme("http", PlainSocketFactory
                .getSocketFactory(), 80));
return new DefaultHttpClient(cm, params);

这个 httpClient 将等待服务器的响应多长时间?

4

2 回答 2

3

据我所知,默认情况下 DefaultHttpClient 的连接超时和套接字超时均为空(或零),这意味着不使用超时,Android 应用程序理论上将永远等待连接和套接字响应完成。因此,强烈建议在使用 DefaultHttpClient 时提供新的连接和套接字超时。

于 2013-09-04T13:40:43.247 回答
0

我在源代码中做了一些窥探,发现了这两种方法。所以看起来他们默认为0。

/**
 * Obtains value of the {@link CoreConnectionPNames#CONNECTION_TIMEOUT}
 * parameter. If not set, defaults to <code>0</code>.
 *
 * @param params HTTP parameters.
 * @return connect timeout.
 */
public static int getConnectionTimeout(final HttpParams params) {
    if (params == null) {
        throw new IllegalArgumentException("HTTP parameters may not be null");
    }
    return params.getIntParameter
        (CoreConnectionPNames.CONNECTION_TIMEOUT, 0);
}

/**
 * Obtains value of the {@link CoreConnectionPNames#SO_TIMEOUT} parameter.
 * If not set, defaults to <code>0</code>.
 *
 * @param params HTTP parameters.
 * @return SO_TIMEOUT.
 */
public static int getSoTimeout(final HttpParams params) {
    if (params == null) {
        throw new IllegalArgumentException("HTTP parameters may not be null");
    }
    return params.getIntParameter(CoreConnectionPNames.SO_TIMEOUT, 0);
}
于 2013-09-04T13:44:44.350 回答