HttpClient的3种超时

原文:http://www.cnblogs.com/codingmyworld/archive/2011/08/17/2141706.html

HttpClient的3种超时说明

/* 从连接池中取连接的超时时间 */
ConnManagerParams.setTimeout(params,
1000);
/* 连接超时 */
HttpConnectionParams.setConnectionTimeout(params,
2000);
/* 请求超时 */
HttpConnectionParams.setSoTimeout(params,
4000);

第一行设置ConnectionPoolTimeout:这定义了从ConnectionManager管理的连接池中取出连接的超时时间,此处设置为1秒。

第二行设置ConnectionTimeout  这定义了通过网络与服务器建立连接的超时时间。Httpclient包中通过一个异步线程去创建与服务器的socket连接,这就是该socket连接的超时时间,此处设置为2秒。

第三行设置SocketTimeout    这定义了Socket读数据的超时时间,即从服务器获取响应数据需要等待的时间,此处设置为4秒。

示例1
 
  

package edu . cdut . robin ;
import org . apache . http . HttpVersion ;
import org . apache . http . client . HttpClient ;
import org . apache . http . conn . ClientConnectionManager ;
import org . apache . http . conn . params . ConnManagerParams ;
import org . apache . http . conn . scheme . PlainSocketFactory ;
import org . apache . http . conn . scheme . Scheme ;
import org . apache . http . conn . scheme . SchemeRegistry ;
import org . apache . http . conn . ssl . SSLSocketFactory ;
import org . apache . http . impl . client . DefaultHttpClient ;
import org . apache . http . impl . conn . tsccm . ThreadSafeClientConnManager ;
import org . apache . http . params . BasicHttpParams ;
import org . apache . http . params . HttpConnectionParams ;
import org . apache . http . params . HttpParams ;
import org . apache . http . params . HttpProtocolParams ;
import org . apache . http . protocol . HTTP ;
public class CustomerHttpClient
{
private static final String CHARSET = HTTP . UTF_8 ;
private static HttpClient customerHttpClient ;
private CustomerHttpClient ()
{
}
public static synchronized HttpClient getHttpClient ()
{
if ( null == customerHttpClient )
{
HttpParams params = new BasicHttpParams ();
/* 设置一些基本参数 */
HttpProtocolParams . setVersion ( params , HttpVersion . HTTP_1_1 );
HttpProtocolParams . setContentCharset ( params , CHARSET );
HttpProtocolParams . setUseExpectContinue ( params , true );
HttpProtocolParams
. setUserAgent (
params ,
"Mozilla/5.0(Linux;U;Android 2.2.1;en-us;Nexus One Build.FRG83) "
+ "AppleWebKit/553.1(KHTML,like Gecko) Version/4.0 Mobile Safari/533.1" );
/* 超时设置 */
/* 从连接池中取连接的超时时间 */
ConnManagerParams . setTimeout ( params , 1000 );
/* 连接超时 */
HttpConnectionParams . setConnectionTimeout ( params , 2000 );
/* 请求超时 */
HttpConnectionParams . setSoTimeout ( params , 4000 );
/* 设置我们的HttpClient支持HTTP和HTTPS两种模式 */
SchemeRegistry schReg = new SchemeRegistry ();
schReg . register ( new Scheme ( "http" , PlainSocketFactory
. getSocketFactory (), 80 ));
schReg . register ( new Scheme ( "https" , SSLSocketFactory
. getSocketFactory (), 443 ));
/* 使用线程安全的连接管理来创建HttpClient */
ClientConnectionManager conMgr = new ThreadSafeClientConnManager (
params , schReg );
customerHttpClient = new DefaultHttpClient ( conMgr , params );
}
return customerHttpClient ;
}
}


示例2
 
  

void doHttpGet ( String userAgent , Context context , String uri )
{
AndroidHttpClient client = null ;
client = AndroidHttpClient . newInstance ( userAgent , context );
HttpParams params = client . getParams ();
HttpConnectionParams . setConnectionTimeout ( params , 30000 );
HttpConnectionParams . setSoTimeout ( params , 60000 );
HttpClientParams . setRedirecting ( params , true );
HttpClientParams . setAuthenticating ( params , false );
HttpResponse response ;
HttpGet request = new HttpGet ( uri );
try
{
response = client . execute ( request );
} catch ( IllegalArgumentException ex )
{
} catch ( IOException ex )
{
}
}

结束!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用HttpClient进行网络请求时,需要设置连接超时时间和获取数据超时时间来防止应用受到影响。连接超时时间是指客户端发送请求到与目标URL建立连接的最大时间,如果在该时间范围内还没有建立连接,则会抛出连接超时异常。获取数据超时时间是指客户端从服务器获取数据的最大时间,如果在该时间范围内没有获取到数据,则会抛出读取数据超时异常。 根据引用,不同版本的HttpClient设置连接超时的方法略有不同。在3.X版本中,可以通过设置client.setConnectionTimeout()和client.setTimeout()来设置连接超时时间。在4.X版本中(4.3之前),可以通过httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 2000)来设置连接超时时间。在4.3版本之后,可以通过创建RequestConfig对象并设置socketTimeout和connectTimeout来设置连接超时时间。示例如下: ```java // 3.X版本 HttpClient client = new HttpClient(); client.setConnectionTimeout(30000); client.setTimeout(30000); // 4.X版本(4.3之前) HttpClient httpClient = new DefaultHttpClient(); httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 2000); httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 2000); // 4.3版本 CloseableHttpClient httpClient = HttpClients.createDefault(); HttpGet httpGet = new HttpGet("http://www.baidu.com"); RequestConfig requestConfig = RequestConfig.custom() .setSocketTimeout(2000) .setConnectTimeout(2000) .build(); httpGet.setConfig(requestConfig); httpClient.execute(httpGet); ``` 需要注意的是,不同版本的HttpClient可能会有一些差异,因此在使用时应根据具体的版本来设置连接超时时间。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [HttpClient超时设置详解](https://blog.csdn.net/u011191463/article/details/78664896)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值