2010-02-11 8 views
2

Jetez un oeil à ceci:Comportement étrange de HtmlUnit (? Bug)

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

L'exécution de cette résultats de code à lancer FileNotFoundException, parce que le code d'état HTTP sur la page est de 404 et obtenir à nouveau la même page avec la Méthode GET, avec User-Agent défini sur Java-.... Pourquoi obtient-il la page (cela n'arrive pas avec les codes d'état "normaux")? Est-ce un bug? Merci

Voici la réponse entière du serveur:

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 

Où est-il dit client pour obtenir quelque chose? Et comment puis-je forcer WebClient à l'ignorer?

Voici une capture d'écran de HTTPDebugger: alt text http://i49.tinypic.com/11lsf1y.png Le problème ici est que je ne comprends pas pourquoi la deuxième demande est envoyée et pourquoi est-il envoyé avec différents useragent.

Répondre

0

Vous exécutez une requête HEAD - cela renvoie une réponse avec un contenu nul. HtmlUnit essaie néanmoins de créer une page. Pour ce faire, il crée une source d'entrée avec url et le contenu (qui est null) et le donne à un analyseur. Une fois qu'un analyseur tente d'analyser la source d'entrée, il voit un contenu nul et utilise l'URL pour récupérer le contenu à nouveau. Ce n'est donc pas le HtmlUnit qui fait les deuxièmes requêtes, c'est l'analyseur XML. Et c'est pourquoi l'agent utilisateur est Java et non HttpClient.