2010-10-07 14 views
8

Sto provando a scaricare una pagina utilizzando la classe WebRequest in C# 4.0. Per qualche ragione questa pagina restituisce tutto il contenuto correttamente, ma con un codice di errore interno HTTP 500.C# HttpWebRequest ignora l'errore HTTP 500

Request.EndGetResponse(ar); 

Quando la pagina restituisce HTTP 500 o 404, questo metodo genera un'eccezione Web. Come posso ignorarlo? So che restituisce 500 ma voglio ancora leggere il contenuto della pagina/risposta.

risposta

0

Utilizzare un try/catch blocco per consentire al programma di continuare a correre, anche se viene generata un'eccezione:

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

È possibile un blocco try/catch per intercettare l'eccezione e fare ulteriore elaborazione in caso di errori http 404 o 500 esaminando l'oggetto risposta esposto dalla classe 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

Il problema è dovuto all'invio dei dettagli del browser al sito richiedente. è necessario identificarsi al sito Web che si sta richiedendo i dati.

semplice aggiungere un UserAgent al codice

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

Il codice finale dovrebbe essere simile a questa:

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; 
} 
} 

Si prega di trovare il riferimento/a prova per il sopra menzionato Codice: https://msdn.microsoft.com/en-us/library/system.net.webclient(v=vs.110).aspx

Questo è stato menzionato nel link

"Un'istanza WebClient non invia intestazioni HTTP opzionali per impostazione predefinita. Se la richiesta richiede un'opzione intestazione nale, è necessario aggiungere l'intestazione alla raccolta Intestazioni. Ad esempio, per conservare le query nella risposta, è necessario aggiungere un'intestazione user-agent. Inoltre, i server possono restituire 500 (Errore interno del server) se manca l'intestazione dell'agente utente. "

Problemi correlati