2010-03-29 10 views
8

ich, ob eine Qualifikation auf http://www.accreditedqualifications.org.uk in Form existiert, um zu bestimmen versuchen:C# erfaßt Seite umleiten

http://www.accreditedqualifications.org.uk/qualification/50084811.seo.aspx

50084811 ein Qualifikationsziel durch den Endanwender eingegeben.

Wenn sie einen ungültigen eingeben, z.

http://www.accreditedqualifications.org.uk/qualification/50084911.seo.aspx

Sie auf eine Fehlerseite umgeleitet werden (mit falschen HTTP-Header, soweit ich sehen kann). Gibt es eine Möglichkeit, die Umleitung in C# zu erkennen? Ich hoffe, in der Lage zu sein, die Umleitung in http-Headern zu erkennen (denke, dass es 2 ausgibt) oder ähnlich, um die gesamte Seite herunterladen zu müssen. Dies könnte viel passieren, also möchte ich den Verkehr minimieren.

bearbeiten

verwendet, um dieses an dem Header einen Blick zu haben, sieht aus wie zwei für eine ungültige Seite ausgegeben werden:

http://pageheaders.com/display-http-headers.php?url=http%3A%2F%2Fwww.accreditedqualifications.org.uk%2Fqualification%2F50084911.seo.aspx&agent=ie6

Antwort

12

Der einfachste Weg ist wahrscheinlich den Inhalt unter Verwendung eines holen HEAD request (setzen Sie Method auf "HEAD") in einem HttpWebRequest mit AllowAutoRedirect auf false gesetzt. Ich kann mich nicht daran erinnern, ob das eine Ausnahme auslöst oder nicht, aber so oder so sollte es einfach zu handhaben sein.

+0

Fand dieses http://stackoverflow.com/questions/924679/c-how-can-i-check-if-a-url-exists-is-valid Ich denke, es ist an den richtigen Linien ist aber seit Die Website gibt kein 404 oder ähnliches aus, es funktioniert nicht. Ich werde weiter experimentieren. – PeteT

+0

@ petebob796: Die Verwendung von 'WebClient' gibt Ihnen möglicherweise nicht genügend Kontrolle. Insbesondere erlaubt es Ihnen nicht, die automatische Weiterleitung zu deaktivieren (soweit ich das sehen kann). Verwenden Sie HttpWebRequest, und sehen Sie sich den Antwortcode an. 301 und 302 sind die normalen Umleitungs-Antwortcodes. –

+0

Danke, jetzt mit HttpWebRequest und HttpWebResponse zusammen mit request.AllowAutoRedirect = false; und request.Method = "HEAD" ;. Für jeden anderen Leser wurde ich von der StatusCode für eine Sekunde abgefangen, es gibt "OK", "NOT FOUND" ... aber es ist eine enum und kann auf den tatsächlichen Fehler 301, 302 umgewandelt werden ... – PeteT

0

Sie können das nur mit einem Webclient von Ihrem Server tun. Wenn Sie den Link zu Ihrem Kunden geben, werden Sie nicht im Anschluss an die Kommunikation zwischen ihm und dem akkreditierten Qualifikationsweb-Server beteiligt sein, und deshalb werden Sie nicht in der Lage sein, die Information zu erhalten, dass der Link zu einem Fehler umgeleitet wurde.

Soweit ich Ihr Projekt verstehen kann, würde ich einen Aufruf mit Webclient (oder was auch immer) von meinem Server machen, um sicherzustellen, dass die Qualifikation existiert und das Ergebnis in der Datenbank mit einer Pufferzeit speichern. Es würde erlauben, nicht zu viele Anrufe zu tätigen und dennoch zuverlässige Informationen zu erhalten.

+0

Dies ist eigentlich ein winforms-Projekt nicht asp.net Ich muss nur validieren das Ziel, das sie eingeben, ist gültig basierend darauf, dass es auf der Website ist. – PeteT

10

Es gibt verschiedene Codes, die zurückgegeben werden können. Sie könnten die verschiedenen Codes a la überprüfen:

response.StatusCode == HttpStatusCode.Redirect 

Sie alle Möglichkeiten Alternativ zu http://msdn.microsoft.com/en-us/library/system.net.httpstatuscode.aspx

anzeigen können, können Sie es ausreichend, um zu überprüfen, ob die Lage in der Antwort unterscheidet sich zu finden.

var request = (HttpWebRequest)WebRequest.Create(uri); 
request.Method = "HEAD"; 
request.AllowAutoRedirect = false; 

string location; 
using (var response = request.GetResponse() as HttpWebResponse) 
{ 
    location = response.GetResponseHeader("Location"); 
} 
return (location != uri.OriginalString);