J'essaie de déterminer si une qualification existe sur http://www.accredikedqualifications.org.uk A >
sous la forme: p>
http://www.accredidQualifications.org.uk/qualification/50084811. seo.aspx p>
50084811 Être un objectif de qualification entré par l'utilisateur final. P>
S'ils entrent un E.g invalide. P>
http://www.accredikedqualifications.org.uk/qualification/50084911. seo.aspx p>
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. P>
Utilisé ceci pour regarder les en-têtes, on dirait que deux sont émis pour une page non valide: p>
5 Réponses :
Le moyen le plus simple est probablement de récupérer le contenu à l'aide d'une demande de tête (définir code>
à" tête ") dans un httpwebrequest code> ayant défini
allowAutoreDirect code>
à false. Je ne me souviens plus que cela provoque une exception ou non, mais de toute façon, il devrait être facile à manipuler. P>
Trouvé ce
@ Petebob796: Utilisation de WebClient code> 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 ...
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. p>
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. p>
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.
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);
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 }
Il existe deux façons de détecter une page redirection:
intervention.stauscode == httpstauscode.redirect code> est défini dans votre HTTPWEBESPONSE LI>
- comparer
demande.requesturi code> et réponse.responseuri code> li>
ol> 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: p> xxx pré> p>