Я читаю веб-страницу, используя HttpClient, как это:
httpclient = new DefaultHttpClient();
httpget = new HttpGet("http://google.com");
HttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream PIS = entity.getContent();
}
Мне нужен тайм-аут на всю работу (подключение, ожидание и чтение - все вместе или по отдельности).
Я попытался установить параметры тайм-аута сразу после строки httpclient = new DefaultHttpClient();
:
int timeout=10;
httpclient.getParams().setParameter("http.socket.timeout", timeout * 1000);
httpclient.getParams().setParameter("http.connection.timeout", timeout * 1000);
httpclient.getParams().setParameter("http.connection-manager.timeout", new Long(timeout * 1000));
httpclient.getParams().setParameter("http.protocol.head-body-timeout", timeout * 1000);
Но это не сработало (Тайм-ауты примерно в 10 раз превышают тайм-аут, который я установил).
Поэтому я попытался потоком отменить запрос через некоторое время, используя httpget.abort()
& httpclient.getConnectionManager().shutdown()
сразу после строки httpget = new HttpGet("http://google.com");
, например:
(new Timer()).schedule(new java.util.TimerTask() {
public void run() {
httpget.abort();
httpclient.getConnectionManager().shutdown();
}
},10000);
но это не имело никакого эффекта (Таймер работает; но эти две строки кода ничего не делают!) !!
Я также пытался использовать это:
URL url = new URL("http://google.com");
URLConnection con = url.openConnection();
con.setConnectTimeout(10000);
con.setReadTimeout(10000);
InputStream PIS = con.getInputStream();
но это было так же, как моя первая попытка (установка параметров тайм-аута в HttpClient
) !!
в чем проблема?
Как мне решить проблему с тайм-аутом?
Спасибо