Странное поведение HtmlUnit (ошибка?)

Взгляните на это:

WebClient client = new WebClient();
WebRequestSettings wrs = new WebRequestSettings(new URL("http://stackoverflow.com/ping/?what-the-duck?"), HttpMethod.HEAD);
client.getPage(wrs);

Выполнение этого кода приводит к выдаче FileNotFoundException, поскольку код состояния HTTP на странице равен 404 и снова получает ту же страницу с помощью метода GET с установленным для User-Agent значением Java-.... Почему он ПОЛУЧАЕТ страницу (это не происходит с «нормальными» кодами состояния)? Это ошибка? Спасибо

Вот весь ответ сервера:

HTTP/1.1 404 Not Found
Cache-Control: private
Content-Length: 7502
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/7.5
Date: Thu, 11 Feb 2010 14:12:11 GMT

Где это говорит клиенту ПОЛУЧИТЬ что-то? И как я могу заставить WebClient его игнорировать?

Вот скриншот HTTPDebugger: alt text Проблема в том, что я не понимаю, почему отправляется второй запрос и почему он отправляется с другим агентом пользователя.


person Fluffy    schedule 11.02.2010    source источник


Ответы (1)


Вы выполняете запрос HEAD — он возвращает ответ с нулевым содержимым. Тем не менее HtmlUnit пытается создать страницу. Для этого он создает источник ввода с URL-адресом и содержимым (который имеет значение null) и передает его синтаксическому анализатору. Когда синтаксический анализатор пытается проанализировать источник ввода, он видит нулевое содержимое и использует URL-адрес для получения содержимого заново. Так что на самом деле второй запрос делает не HtmlUnit, а анализатор XML. И именно поэтому пользовательский агент — это Java, а не HttpClient.

person lexicore    schedule 29.03.2010