Pregunta

Estoy tratando de establecer una conexión con un servidor que envía 401 Error de autenticación para todas mis solicitudes, junto con la respuesta normal html. p.ej. Sin embargo, también quiero leer la respuesta HTML que se envía alongwith de modo que pueda procesarla. Un intercambio ejemplo cabecera capturado usando LiveHTTPHeaders: Claramente, de longitud de contenido no es cero. Firefox muestra que sea javascript.

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

En este punto, se abre un formulario en Firefox que me pide que introduzca mi nombre de usuario y contraseña.

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

En este punto estoy redirigidos a otra URL. Sin embargo, el problema que tengo es cómo conseguir que el contenido de longitud 924 que se envía junto con el 401 no autorizado, ya que el contenido me ayudará en hacer lo que quiero hacer más. Pero la misma línea:

WebResponse loginResponse = loginRequest.GetResponse();

Se inicia una excepción.

Yo estaré agradecido por cualquier sugerencia para ayudar a conseguir al contenido real.

Gracias.

¿Fue útil?

Solución

Es necesario leer la propiedad WebException del Response, como esto:

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.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top