9
votes

C # Détecter la page Rediriger

J'essaie de déterminer si une qualification existe sur http://www.accredikedqualifications.org.uk sous la forme:

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

50084811 Être un objectif de qualification entré par l'utilisateur final.

S'ils entrent un E.g invalide.

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

Ils sont redirigés vers une page d'erreur (avec des en-têtes HTTP incorrects aussi loin que je peux voir). Y a-t-il un moyen de détecter la redirection dans C #. J'espère pouvoir détecter la redirection dans les en-têtes HTTP (pensez qu'il émettra 2) ou similaire comme s'opposer à avoir à télécharger la page entière. Cela pourrait se produire beaucoup pour que je voudrais minimiser la circulation.

Modifier

Utilisé ceci pour regarder les en-têtes, on dirait que deux sont émis pour une page non valide:

http://pageheaders.com/display-http-headers.php?url=http%3a%2f%2fwww.accredikedqualifications.org.uk%2fqualification%2f50084911.seo.aspx&agent=ie6


0 commentaires

5 Réponses :


14
votes

Le moyen le plus simple est probablement de récupérer le contenu à l'aide d'une demande de tête (définir à" tête ") dans un httpwebrequest ayant défini allowAutoreDirect à false. Je ne me souviens plus que cela provoque une exception ou non, mais de toute façon, il devrait être facile à manipuler.


3 commentaires

Trouvé ce Stackoverflow.com/questions/924679/... Je pense que c'est le long des lignes correctes, mais que le site n'émet pas un 404 ou similaire, cela ne fonctionne pas. Je vais continuer à expérimenter.


@ Petebob796: Utilisation de WebClient peut ne pas vous donner suffisamment de contrôle. En particulier, cela ne vous permet pas de désactiver la redirection automatique (autant que je puisse voir). Utilisez httpwebrequest et regardez le code de réponse. 301 et 302 sont les codes de réponse de la redirection normaux.


Merci bien trié à l'aide de httpwebrequest et httpwebrevonse avec demande.Avoiraautorederect = false; et demande.method = "tête" ;. Pour quelqu'un d'autre lisant, j'ai été pris par le code de statut pour une seconde, il renvoie "OK", "non trouvé" ... mais c'est un énumé et peut être jeté à l'erreur réelle 301, 302 ...



0
votes

Vous ne pouvez faire que cela à l'aide d'un WebClient à partir de votre serveur. Si vous donnez le lien à votre client, vous ne participerez pas ensuite à la communication entre lui et le serveur ACCRÉDITÉDITÉDÉDITÉDITÉDÉDITÉS, et vous ne pourrez donc pas obtenir les informations que le lien a été redirigé vers une erreur.

Autant que je puisse comprendre votre projet, je ferais appel à un appel à l'aide de WebClient (ou que jamais) de mon serveur pour être sûr que la qualification existe et stocke le résultat dans la base de données avec une heure tampon. Cela permettrait de ne pas faire trop d'appels et d'obtenir néanmoins des informations fiables.


1 commentaires

Ceci est en fait un projet WinForms non ASP.NET, je dois juste valider le but qu'ils entrent sont valables en fonction de celui-ci sur le site.



14
votes

Il existe un certain nombre de codes différents pouvant être retournés. Vous pouvez vérifier les différents codes A LA:

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


0 commentaires

0
votes

Essayez ceci:

try
{
     HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(line);
     myHttpWebRequest.Timeout = 20000;
     myHttpWebRequest.MaximumAutomaticRedirections = 1;
     myHttpWebRequest.AllowAutoRedirect = true;
     HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
     if (myHttpWebResponse.ResponseUri.ToString() == "Some website")
         {
              //your logic
         }

     myHttpWebResponse.Close();
}
catch (WebException)
{
     // record exception
}


0 commentaires

0
votes

Il existe deux façons de détecter une page redirection:

  1. Vérifiez si intervention.stauscode == httpstauscode.redirect est défini dans votre HTTPWEBESPONSE
  2. comparer demande.requesturi et réponse.responseuri

    Veuillez noter que 1) dépend de la mise en œuvre du serveur, tous les serveurs définissent ce code d'état, donc l'option 2) peut être plus fiable: xxx


0 commentaires