Строгий и надежный тайм-аут HttpClient

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

в чем проблема?
Как решить проблему с тайм-аутом?

Спасибо

5
задан RYN 31 January 2012 в 20:48
поделиться