2011-03-17 1 views
0

Je suis déconner en essayant d'écrire un petit robot Web. J'analyse une URL de certains HTML et parfois je reçois une page de redirection php. Je cherche un moyen d'obtenir l'uri de la page redirigée.C# WebRequest avec php redirection page

Je suis en train d'utiliser System.Net.WebRequest pour obtenir un flux en utilisant le code comme celui-ci

 WebRequest req = WebRequest.Create(link); 
     Stream s = req.GetResponse().GetResponseStream(); 
     StreamReader st = new StreamReader(WebRequest.Create(link).GetResponse().GetResponseStream()); 

Le problème est que le lien est une redirection PHP, de sorte que le flux est toujours nul. Comment est-ce que j'obtiendrais l'URI à la page que le php redirige?

+0

Ne renvoie-t-il pas un HTTP 302? Si c'est le cas, il devrait y avoir un en-tête de réponse indiquant le nouvel emplacement. Consultez http://stackoverflow.com/questions/1391373/how-do-i-check-for-a-302-response-webrequest pour plus d'informations. – Tejs

Répondre

1
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(link); 
    req.AllowAutoRedirect = true; 
    reg.AutomaticDecompression = DecompressionMethods.GZip; 

    StreamReader _st = new StreamReader(_req.GetResponseStream(), System.Text.Encoding.GetEncoding(req.CharacterSet)); 

le AllowAutoRedirect vous amènera automatiquement au nouvel URI; si c'est vous êtes l'effet désiré. AutomaticDecompression décompresse automatiquement les réponses compressées. De plus, vous devriez exécuter la partie du flux de réponses get dans un bloc try catch. J'ai mon exp il jette beaucoup de WebExceptions.

Puisque vous expérimentez cette technologie, assurez-vous de lire les données avec le codage correct. Si vous essayez d'obtenir des données à partir d'un site japonais sans utiliser Unicode, les données seront invalides.

0

Vérifiez l'en-tête "Location" de la réponse - il doit contenir la nouvelle URL.