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

 

结束!

 

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://www.cnblogs.com/captainbed

相关文章