1

因此,我正在运行一个多线程程序,该程序对 api 和一些它想要抓取的网页进行调用。在一些不寻常的情况下,httpget 会严重失败并导致程序“冻结”(线程永远不会退出,线程池永远不会关闭,main 永远不会退出等)

我需要为我正在建立的 http 连接设置超时。我正在使用 DefaultHttpClient

DefaultHttpClient httpclient = new DefaultHttpClient();

而且我没有设置任何参数。

有人可以帮我把这些超时,或者至少指出我应该在哪里寻找处理超时?(Apache 似乎有很棒的库,但似乎从来没有很好的例子)

4

3 回答 3

6

尝试如下所示。

int connectiontimeout = 1000; //1 second
int sockettimeout = 1000;

HttpParams httpparameters = new BasicHttpParams();

HttpConnectionParams.setConnectionTimeout(httpparameters, connectiontimeout);
HttpConnectionParams.setSoTimeout(httpparameters, sockettimeout);

HttpClient httpclient = new DefaultHttpClient(httpparameters);
于 2012-10-16T13:56:01.210 回答
1

你想要HttpConnectionParams。您可能需要区分连接超时和套接字超时(与读取有关,而不是连接

SO_TIMEOUT 以毫秒为单位定义默认套接字超时 (SO_TIMEOUT),即等待数据的超时。

CONNECTION_TIMEOUT 确定连接建立之前的超时时间。

有关更多详细信息,请参见此处。这些选项。

于 2012-10-16T13:50:03.020 回答
0

您可能想要使用两者中的一个,最好是第一个。

 HttpConnectionParams.setConnectionTimeout(int) 

 HttpConnection.setConnectionTimeout(int)

作为:

 HttpConnectionParams.setConnectionTimeout( httpParams, 5000 );
于 2012-10-16T13:49:49.307 回答