7

Mamy narzędzie, które sprawdza, czy dany URL jest aktywnym adresem URL. Jeśli dany adres URL jest dostępny, inna część naszego oprogramowania może skasować zawartość z niego.Błąd "Serwer zdalny zwrócił błąd: (403) Zabroniono", gdy skrobanie ekranu za pomocą HttpWebRequest.GetResponse()

To jest mój kod do sprawdzania, czy adres URL jest żywo

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

Ten kod działa perfekcyjnie, ale dla konkretnej witryny hostowane na apache otrzymuję wyjątek internetowej z następującym komunikatem. „Zdalny serwer zwrócił błąd: (403) Zakazane” W dalszej kontroli znalazłem następujące dane w obiekcie WebException

status = „ProtocolError” StatusDescription = „Bad Behavior”

To żądanie nagłówek "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 Połączenie: Keep-Alive"

To jest nagłówek odpowiedzi "Keep-Alive: timeout = 4, max = 512 Połączenie: Keep-Alive Transfer-Encoding: pakietowego Content-Type: text/html Data: Wed, 13 Jan 2011 10:29:36 GMT Server: Apache”

Ja wybiłem te nagłówki za pomocą zegarka w VS2008. Ramka w użyciu to 3,5.

Odpowiedz

13

Okazało się, że wszystko, co potrzebne do zrobienia było po

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

i zostało to naprawione.

+0

Witaj przy pomocy @syed, napotykam ten sam problem i już dodałem kod .Accept, ale nadal mam ten błąd. Jakieś pomysły? dzięki – swdev

+5

Mam to, muszę dodać te trzy linie, 'webRequest.Method =" GET "; webRequest.UserAgent = "Foo"; webRequest.Accept = "text/html"; 'Inny serwer może wymagać innej konfiguracji – swdev

+1

Dzięki swdev. Twoja wskazówka wydaje się rozwiązać problem z niektórymi stronami wikipedii. – newman

Powiązane problemy