Я читаю веб-страницу с помощью 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
) !!
в чем проблема?
Как решить проблему с тайм-аутом?
Спасибо