2010-01-10 8 views
0

J'essaye d'établir une connexion à un serveur qui envoie l'erreur 401 d'authentification pour toutes mes demandes avec la réponse html normale. par exemple. Cependant, je veux aussi lire la réponse HTML qui est envoyée pour que je puisse l'analyser. Un exemple d'échange d'en-tête capturé à l'aide de LiveHTTPHeaders: Clairement, content-length est différent de zéro. Firefox montre que c'est javascript.Obtenez le contenu de la réponse avec StatusCode 401

https://172.31.1.251:1003/fgtauth?73e285357b2dc5cc 
Request: 
GET /fgtauth?73e285357b2dc5cc HTTP/1.1 
Host: 172.31.1.251:1003 
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1b4) Gecko/20090423 Firefox/3.5b4 (.NET CLR 3.5.30729) 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-us,en;q=0.5 
Accept-Encoding: gzip,deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 300 
Connection: keep-alive 

Response: 
HTTP/1.x 401 Unauthorized 
WWW-Authenticate: Fortigate 
Content-Length: 1091 
Connection: Keep-Alive 
Cache-Control: no-cache 
Content-Type: text/html 

À ce stade, un formulaire s'ouvre dans firefox qui me demande d'entrer mon nom d'utilisateur et mot de passe.

https://172.31.1.251:1003/ 

Request: 
POST/HTTP/1.1 
Host: 172.31.1.251:1003 
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1b4) Gecko/20090423 Firefox/3.5b4 (.NET CLR 3.5.30729) 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-us,en;q=0.5 
Accept-Encoding: gzip,deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 300 
Connection: keep-alive 
Referer: https://172.31.1.251:1003/ 
Content-Type: application/x-www-form-urlencoded 
Content-Length: 93 
magic=73e285357b2dc5cc&username=uuxx&password=xxuu&4Tredir=http%3A%2F%2Fwww.google.com%2F 


Response: 
HTTP/1.x 401 Unauthorized 
WWW-Authenticate: Fortigate 
Content-Length: 924 
Connection: Keep-Alive 
Cache-Control: no-cache 
Content-Type: text/html 

À ce stade, je suis redirigé vers une autre URL. Cependant, le problème que j'ai est comment obtenir le contenu de la longueur 924 qui est envoyé avec le 401 Non autorisé, parce que ce contenu m'aidera à faire ce que je veux faire plus loin. Mais la ligne même:

WebResponse loginResponse = loginRequest.GetResponse(); 

déclenche une exception.

Je serai reconnaissant pour toutes les suggestions pour m'aider à accéder au contenu réel.

Merci.

+0

-t-il vraiment revenir "HTTP/1.x"? C'est illégal. – EricLaw

Répondre

4

Vous devez lire la propriété « WebExceptionResponse, comme ceci:

WebResponse loginResponse; 
try { 
    loginResponse = loginRequest.GetResponse(); 
} catch(WebException ex) { 
    if (ex.Status == WebExceptionStatus.ProtocolError) { 
     loginResponse = ex.Response; 
    } else 
     throw; 
} 

//Do something with the response, and remember to dispose it. 
Questions connexes