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 )
{
}
}

结束!

你可能感兴趣的:(HttpClient的3种超时)