2010-03-29 13 views
8

estoy tratando de determinar si existe una titulación en http://www.accreditedqualifications.org.uk en la forma:C# detectan página de redirección

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

50084811 siendo una titulación objetivo introducida por el usuario final.

Si entran otra inválida por ejemplo,

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

se les redirige a una página de error (con cabeceras HTTP incorrectas por lo que yo puedo ver). ¿Hay alguna forma de detectar la redirección en C#? Espero poder detectar la redirección en los encabezados http (pensando que emitirá 2) o similar, como opuesto a tener que descargar toda la página. Esto podría estar sucediendo mucho, por lo que me gustaría minimizar el tráfico.

Editar

utilizado esto para echar un vistazo a los encabezados se parece a dos se emiten por una página no válida:

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

Respuesta

12

La forma más sencilla es probablemente a buscar el contenido con un dispositivo Solicitud HEAD (establecer Method en "HEAD") en un HttpWebRequest habiendo establecido AllowAutoRedirect en falso. No puedo recordar de improviso si eso causará una excepción o no, pero de cualquier manera debería ser fácil de manejar.

+0

Encontramos este http://stackoverflow.com/questions/924679/c-how-can-i-check-if-a-url-exists-is-valid creo que es a lo largo de las líneas correctas pero desde el sitio no emite un 404 o similar, no funciona. Voy a seguir experimentando. – PeteT

+0

@ petebob796: Usar 'WebClient' puede no darle suficiente control. En particular, no le permite desactivar el redireccionamiento automático (por lo que puedo ver). Use HttpWebRequest y mire el código de respuesta. 301 y 302 son los códigos de respuesta de redirección normales. –

+0

Gracias ordenado ahora usando HttpWebRequest y HttpWebResponse junto con request.AllowAutoRedirect = false; y request.Method = "HEAD"; Para cualquiera que lea otra cosa que quedó atrapado por el StatusCode por un segundo devuelve "OK", "no encontrado" ... pero es una enumeración y se puede convertir en el error real 301, 302 ... – PeteT

0

sólo se puede hacer que el uso de un cliente Web de su servidor. Si le da el enlace a su cliente, no será parte de la comunicación entre él y el servidor acreditado de Qualificationsweb después, y por eso no podrá obtener la información de que el enlace ha sido redirigido a un error.

Por lo que puedo entender su proyecto, haría una llamada usando Webclient (o cualquier otra) de mi servidor para asegurarme de que la calificación existe y almacenar el resultado en la base de datos con un tiempo de almacenamiento en memoria intermedia. Permitiría no hacer demasiadas llamadas y obtener información confiable de todos modos.

+0

Este es en realidad un proyecto winforms no asp.net Solo necesito validar que el objetivo que ingresan sea válido en función de que esté en el sitio. – PeteT

10

Hay una serie de diferentes códigos que podrían ser devueltos. Usted puede comprobar los diferentes códigos a la:

response.StatusCode == HttpStatusCode.Redirect 

se pueden ver todas las posibilidades en http://msdn.microsoft.com/en-us/library/system.net.httpstatuscode.aspx

Alternativamente, puede que le resulte suficiente para comprobar si la ubicación en la respuesta es diferente.

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); 
Cuestiones relacionadas