7

Abbiamo uno strumento che controlla se un dato URL è un URL live. Se un dato URL è attivo un'altra parte del nostro software può schermare il contenuto da esso.Errore "Il server remoto ha restituito un errore: (403) Proibito" quando si scorre lo schermo utilizzando HttpWebRequest.GetResponse()

Questo è il mio codice per verificare se un URL è vivo

public static bool IsLiveUrl(string url) 
    { 
     HttpWebRequest webRequest = WebRequest.Create(url) as HttpWebRequest; 
     webRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6) Gecko/20060728 Firefox/1.5"; 
     webRequest.CookieContainer = new CookieContainer(); 
     WebResponse webResponse; 
     try 
     { 
      webResponse = webRequest.GetResponse(); 
     } 
     catch (WebException e) 
     { 
      return false; 
     } 
     catch (Exception ex) 
     { 

      return false; 
     } 
     return true; 
    } 

Questo codice funziona perfettamente, ma per un particolare sito ospitato su Apache io sono sempre un'eccezione web con seguente messaggio. "Il server remoto ha restituito un errore: (403) Forbidden" Su ulteriori controlli ho trovato i seguenti dati nell'oggetto WebException

Stato = "ProtocolError" StatusDescription = "cattivo comportamento"

Questa è la richiesta header "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv: 1.8.0.6) Gecko/20060728 Firefox/1.5 Host: scenicspares.co.uk Connessione: Keep-Alive"

Questa è l'intestazione della risposta "Keep-Alive: timeout = 4, max = 512 Connessione: Keep-Alive Transfer-Encoding: chunked Content-Type: text/html Data: Giovedì, 13 Gennaio, 2011 10:29:36 GMT Server: Apache"

ho estratto queste intestazioni utilizzando un orologio in VS2008. Il frame work in use è 3.5.

risposta

13

Si è scoperto che tutto quello che dovevo fare era seguito

  webRequest.Accept = "*/*"; 
      webResponse = webRequest.GetResponse(); 

ed è stato risolto.

+0

Ciao @sinto, affronto lo stesso problema e aggiungo già il codice .Accetto, ma ho ancora ricevuto questo errore. Qualche idea? grazie – swdev

+5

Capito, devo aggiungere queste tre linee, 'webRequest.Method =" GET "; webRequest.UserAgent = "Foo"; webRequest.Accept = "text/html"; 'Server diversi potrebbero richiedere impostazioni diverse – swdev

+1

Grazie swdev. Il tuo suggerimento sembra risolvere il problema con alcune pagine di Wikipedia. – newman

Problemi correlati