Странное поведение HtmlUnit (ошибка?) - PullRequest
2 голосов
/ 11 февраля 2010

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

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 Проблема в том, что я не понимаю, почему второй запрос отправляется и почему он отправляется с другим идентификатором пользователя.

1 Ответ

0 голосов
/ 29 марта 2010

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

...