2010-09-07 15 views
0

J'essaie de lire le code HTML d'une page qui contient une redirection non retardée. L'extrait suivant (C#) me donnera la page de destination/redirigé, pas celui initial Je dois voir:Comment capturer le HTML de la page de redirection avant qu'elle ne redirige?

using System.Net; 
using System.Text; 

public class SomeClass { 
    public static void Main() { 
     byte[] data = new WebClient().DownloadData("http://SomeUrl.com"); 
     System.Console.WriteLine(Encoding.ASCII.GetString(data)); 
    } 
} 

Y at-il un moyen d'obtenir le code HTML d'une page de redirection? (Je préfère .NET mais un extrait en Java ou en Python serait bien aussi .. Thx!)

Répondre

5

À moins que la redirection ne soit faite côté client, vous ne pouvez pas. Si la redirection est effectuée côté serveur, aucun fichier html n'est réellement généré vers le client, mais l'en-tête est redirigé vers le nouveau serveur.

+0

Intéressant. Je suppose que je n'ai vu que des redirections basées sur le script côté client auparavant, je ne connaissais pas le type de serveur. (Web dev n'est pas mon fort. ;-) +1, merci –

+0

Il veut obtenir la source de la page qui fait la redirection, pas celui qui est redirigé vers. – CyberDude

+0

Certains programmeurs moche créent des pages Web qui envoient un en-tête de redirection mais oublient d'arrêter l'exécution, donc si le navigateur et le client http suivront la redirection, il y aura toujours des octets de contenu le long du fil. (Habituellement, un serveur Web produirait du code HTML avec un lien vers la page cible, pour les anciens clients et d'autres choses). – aularon

-1

Simplest réponse serait d'ajouter la page en cours sur le composant QueryString de la redirection lors de la redirection, par exemple:

Response.Redirect(newPage + "?FromPage=" + Request.Url); 

Ensuite, la nouvelle page pourrait voir où vous canne en regardant simplement Request.QueryString("FromPage").

+0

La question concerne la possibilité de voir le code HTML de la page de redirection, et non l'URL. –

1

Il faudrait plus de travail, mais plutôt que d'utiliser WebClient, utilisez HttpWebRequest et définissez la propriété AllowAutoRedirect-False. Une redirection déclenche alors une exception, mais vous pouvez obtenir n'importe quel texte de réponse (et certaines pages contiennent du texte de réponse avec la redirection) à partir de l'objet de réponse de l'exception. Après avoir reçu la réponse de l'exception, vous pouvez émettre un autre HttpWebRequest pour l'URL de redirection (spécifié dans l'en-tête de réponse Location).

Vous pourrait être capable de faire quelque chose de similaire avec WebRequest si vous créez un objet dérivé, MyWebRequest, où vous surchargez la méthode GetWebRequest et définissez la propriété AllowAutoRedirect. Je ne sais pas quel genre d'exception, le cas échéant, la méthode DownloadData retournera si vous faites quelque chose comme ça.

Comme quelqu'un l'a dit précédemment, cela ne fonctionnera que pour les pages qui effectuent des redirections côté client (généralement 301 ou 302). S'il y a une redirection côté serveur, vous ne le sauriez jamais.

Questions connexes