Вызовите getPage из htmlunit WebClient с отключенным JavaScript и setTimeout, установленным в 10000, ждет вечно - PullRequest
3 голосов
/ 06 февраля 2011

У меня проблемы с Htmlunit, я отключил JavaScript и установил тайм-аут на 10000 перед вызовом getpage, я ожидал исключение после тайм-аута, но htmlunit ждет вечно.

После некоторого поиска я понял, что у кого-то в 2009 году была такая же проблема ( Тайм-аут соединения не работает ), он жаловался на «Тайм-аут соединения не работает» и на некоторые значения в тайм-ауте не работает, но до сих пор 2011 не получил ответа.

Кто-то здесь спрашивал о том, какое исключение выдается, но я думаю, что это не всегда. Я не могу получить ответ от Apache HttpClient setTimeout , либо. Вы можете увидеть другого человека, спрашивающего об остановке по таймауту в Завершить или Остановить HtmlUnit .

Вы можете увидеть, как это безумие, если попытаетесь:

milisecReqTimeout = 10;
while(true)
{
    _webclient.setTimeout(milisecReqTimeout);
    milisecReqTimeout = milisecReqTimeout + 10;
    _htmlpage = _webclient.getPage(url);
}

Ответы [ 2 ]

3 голосов
/ 28 февраля 2011

</p> <pre><code> _thewebclient.setWebConnection(new HttpWebConnection(_thewebclient) { @Override protected synchronized AbstractHttpClient getHttpClient() { AbstractHttpClient client = super.getHttpClient(); if (_TimeoutCliSocket > 0) { //Sets the socket timeout (SO_TIMEOUT) in milliseconds to //be used when executing the method. //A timeout value of zero is interpreted as an infinite timeout. //Time that a read operation will block for, before generating //an java.io.InterruptedIOException client.getParams().setParameter("http.socket.timeout", _TimeoutCliSocket); } if (_TimeoutCliConnection > 0) { //The timeout in milliseconds used when retrieving an // HTTP connection from the HTTP connection manager. // Zero means to wait indefinitely. client.getParams().setParameter("http.connection-manager.timeout", _TimeoutCliConnection); } client.getParams().setParameter("http.tcp.nodelay", true); return client; } });

Bye

0 голосов
/ 07 февраля 2011

Я нашел, с помощью HttpUnit 1.6.2, установив эти

    final HttpClient client = new HttpClient();
    final GetMethod method = new GetMethod(pUrl);

    client.setConnectionTimeout((int) timeout);
    client.setTimeout((int) timeout);

    final int statusCode = client.executeMethod(method);

Казалось бы, сделать трюк. Оба являются устаревшими методами. (

...