2011-01-06 4 views
0

Ich bin ein Tool zur Validierung von Links in URL eingegeben entwickelt. Angenommen, ich habe eine URL (z. B. http://www-review-k6.thinkcentral.com/content/hsp/science/hspscience/na/gr3/se_9780153722271_/content/nlsg3_006.html ) in Textfeld1 eingegeben, und ich möchte überprüfen, ob der Inhalt aller Links auf Remote-Server existiert oder nicht. Schließlich möchte ich eine Protokolldatei für die defekten Links.Ich möchte überprüfen, ob die Datei in einer URL eingegeben oder nicht verwendet. NET

+0

Hey user564931, willkommen in der Gemeinschaft. Achten Sie darauf, alle Antworten, die Sie hilfreich fanden (wie Scott's), abzustimmen. –

Antwort

0

Machen Sie eine HTTP-Anfrage an die URL und sehen Sie, ob Sie eine 404-Antwort bekommen. Wenn ja, dann existiert es nicht.

Brauchen Sie ein Codebeispiel?

1

die HttpWebResponse Klasse verwenden:

HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("http://www.gooogle.com/");    
HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse(); 

if (response.StatusCode == HttpStatusCode.NotFound) 
{ 
    // do something 
} 
+0

Vielen Dank Scott für Ihre wertvolle Unterstützung –

1
bool LinkExist(string link) 
{ 
    HttpWebRequest webRequest = (HttpWebRequest) webRequest.Create(link); 
    HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse(); 
    return !(webResponse.StatusCode != HttpStatusCode.NotFound); 
} 
3

Sie HttpWebRequest verwenden können.

Note vier Dinge

1) Die webRequest wird Ausnahme auslösen, wenn die Verbindung nicht

2) existiert wie Sie können Auto-Umleitung deaktivieren

3) Sie können auch prüfen, gerne wenn es eine gültige URL ist. Wenn nicht, wird UriFormatException ausgelöst.

AKTUALISIERT

4) Per Paige vorgeschlagen, Verwenden Sie "Kopf" in request.method so, dass es nicht die ganze Remote-Datei

static bool UrlExists(string url) 
    { 
     try 
     { 
      HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); 
      request.Method = "HEAD"; 
      request.AllowAutoRedirect = false; 
      request.GetResponse(); 
     } 
     catch (UriFormatException) 
     { 
      // Invalid Url 
      return false; 
     } 
     catch (WebException ex) 
     { 
      // Valid Url but not exists 
      HttpWebResponse webResponse = (HttpWebResponse)ex.Response; 
      if (webResponse.StatusCode == HttpStatusCode.NotFound) 
      { 
       return false; 
      } 
     } 
     return true; 
    } 
+0

Hmm ... Vielleicht sollte ich nicht den StatusCode == NotFound überprüfen, da es sowieso WebException ist –

+2

Ich würde auch empfehlen, nur HEAD Anfrage zu senden, damit Sie nicht die gesamte Remote-Ressource herunterladen Datei. Fügen Sie in diesem Fall request.Method = "HEAD" kurz vor der request.GetResponse() Zeile hinzu. –

+0

@Paige Aktualisierte den Code. Vielen Dank –

0

Wenn Ihr Ziel eine stabile Validierung der Seitenquelle ist, ziehen Sie ein Werkzeug in Betracht, das bereits geschrieben wurde, z. B. W3C Link Checker. Es kann als command-line program ausgeführt werden, das das Finden von Links, Bildern, CSS usw. behandelt und sie auf Gültigkeit prüft. Es kann auch eine gesamte Website rekursiv überprüfen.

Verwandte Themen