2010-10-07 41 views
8

Estoy intentando descargar una página usando la clase WebRequest en C# 4.0. Por algún motivo, esta página devuelve todo el contenido correctamente, pero con un código de error interno HTTP 500.C# HttpWebRequest ignora HTTP 500 error

Request.EndGetResponse(ar); 

Cuando la página devuelve HTTP 500 o 404, este método arroja una WebException. ¿Cómo puedo ignorar esto? Sé que devuelve 500 pero todavía quiero leer el contenido de la página/respuesta.

Respuesta

0

Use un bloque de try/catch para permitir que su programa siga funcionando incluso si se produce una excepción:

try 
{ 
    Request.EndGetResponse(ar); 
} 
catch (WebException wex) 
{ 
    // Handle your exception here (or don't, to effectively "ignore" it) 
} 

// Program will continue to execute 
7
try { 
    resp = rs.Request.EndGetResponse(ar); 
} 
catch (WebException ex) 
{ 
    resp = ex.Response as HttpWebResponse; 
} 
20

Puede un bloque try/catch para detectar la excepción y realizar el procesamiento adicional en caso de errores http 404 o 500 al observar el objeto de respuesta expuesto por la clase WebExeption.

try 
{ 
    response = (HttpWebResponse)Request.EndGetResponse(ar); 
} 
catch (System.Net.WebException ex) 
{ 
    response = (HttpWebResponse)ex.Response; 

    switch (response.StatusCode) 
    { 
     case HttpStatusCode.NotFound: // 404 
      break; 

     case HttpStatusCode.InternalServerError: // 500 
      break; 

     default: 
      throw; 
    } 
} 
0

El problema se debe a que no se envían los datos del navegador al sitio solicitante. necesita identificarse en el sitio web donde está solicitando los datos.

sencillo añadir un agente de usuario a su código

request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv: 2.0) Gecko/20100101 Firefox/4.0";

El código final debe ser algo como esto:

HttpWebRequest Request = (HttpWebRequest)WebRequest.Create(http://WEBURL); 
Request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0) Gecko/20100101 Firefox/4.0"; 
try 
{ 
response = (HttpWebResponse)Request.EndGetResponse(ar); 
} 
catch (System.Net.WebException ex) 
{ 
response = (HttpWebResponse)ex.Response; 

switch (response.StatusCode) 
{ 
    case HttpStatusCode.NotFound: // 404 
     break; 

    case HttpStatusCode.InternalServerError: // 500 
     break; 

    default: 
     throw; 
} 
} 

Por favor, encontrar la referencia/prueba para el antes mencionado código: https://msdn.microsoft.com/en-us/library/system.net.webclient(v=vs.110).aspx

Esto fue mencionado en el enlace

"Una instancia de WebClient no envía encabezados HTTP opcionales de manera predeterminada. Si su solicitud requiere un optio Encabezado final, debe agregar el encabezado a la colección Encabezados. Por ejemplo, para retener consultas en la respuesta, debe agregar un encabezado de agente de usuario. Además, los servidores pueden devolver 500 (Internal Server Error) si falta el encabezado del agente de usuario. "

Cuestiones relacionadas