7

Wir haben ein Tool, das prüft, ob eine gegebene URL eine Live-URL ist. Wenn eine gegebene URL live ist, kann ein anderer Teil unserer Software den Inhalt von ihr screenen.Fehler erhalten "Der Remote-Server hat einen Fehler zurückgegeben: (403) Forbidden" beim Screen Scraping mit HttpWebRequest.GetResponse()

Dies ist mein Code für die Überprüfung, ob eine URL Live ist

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

Dieser Code funktioniert perfekt, aber für eine bestimmte Website auf Apache gehostet ich erhalte eine Web-Ausnahme mit der Meldung folgen. „Der Remoteserver hat einen Fehler zurückgegeben: (403) verboten“ Bei der weiteren Überprüfung fand ich die folgenden Angaben in dem WebException Objekt

Status = „Protocol“ StatusDescription = „Bad Behaviour“

Diese die Anforderung header "Benutzer-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de-DE; rv: 1.8.0.6) Gecko/20060728 Firefox/1.5 Host: scenicspares.de Verbindung: Keep-Alive"

Dies ist die Antwort Kopfzeile "Keep-Alive: Timeout = 4, max = 512 Verbindung: Keep-Alive Transfer-Encoding: Chunked Content-Type: text/html Datum: Do, 13. Januar 2011 10.29.36 GMT Server: Apache“

ich extrahiert diese Header eine Uhr in VS2008 verwenden. Die verwendete Rahmenarbeit ist 3,5.

Antwort

13

Es stellte sich heraus, dass alles, was ich

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

und es wurde festgelegt folgenden tun musste war.

+0

Hallo @syed, ich habe das gleiche Problem, und fügen Sie bereits die .Akzept Code, aber ich habe immer noch diesen Fehler. Irgendwelche Ideen? danke – swdev

+5

Ich habe diese drei Zeilen hinzufügen, webRequest.Method = "GET"; webRequest.UserAgent = "Foo"; webRequest.Accept = "text/html"; 'Unterschiedlicher Server erfordert möglicherweise andere Einstellungen – swdev

+1

Danke swdev. Ihr Tipp scheint das Problem mit einigen Wikipedia-Seiten zu lösen. – newman

Verwandte Themen