处理HttpClient(Httpget)超时

时间:2012-10-16 13:47:41

标签: java httpclient apache-httpclient-4.x

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

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

DefaultHttpClient httpclient = new DefaultHttpClient();

我没有设置任何参数。

有人可以帮助我解决这些问题或者至少指出我应该寻找处理超时的地方吗? (Apache似乎有很好的库,似乎从来没有好的例子)

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

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

  

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

     

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

有关详细信息,请参阅here。这些选择。

答案 2 :(得分:0)

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

 HttpConnectionParams.setConnectionTimeout(int) 

 HttpConnection.setConnectionTimeout(int)

为:

 HttpConnectionParams.setConnectionTimeout( httpParams, 5000 );