2017-10-01 8 views
0

Lors de l'exécution des lignes de code suivantes:StatusCode pour GetResponse() est OK, mais url Rediriger

string link = "https://finance.yahoo.com/r/4951f719-c8e1-3b1d-b4db-684ef6739b8e/iphone-x-5-reasons-to-wait?utm_source=yahoo&utm_medium=partner&utm_campaign=yahootix&partner=yahootix&yptr=yahoo&.tsrc=rss" 
HttpWebRequest myHttpWebRequest=(HttpWebRequest)WebRequest.Create(link);  
myHttpWebRequest.MaximumAutomaticRedirections=100; 
myHttpWebRequest.AllowAutoRedirect=true; 
HttpWebResponse myHttpWebResponse=(HttpWebResponse)myHttpWebRequest.GetResponse(); 

je reçois StatusCode « OK » et ResponseUri est toujours la même URL d'origine et non pas le réinjecter un. enter image description here

Comment puis-je obtenir la dernière URL redirigée?

Répondre

1

AllowAutoRedirect La propriété fonctionne uniquement si l'URL est redirigée par le protocole HTTP (lorsque le serveur renvoie le code HTTP 30x). Mais cette URL est redirigée par javascript (ou meta http-equiv='refresh' tag, si javascript n'est pas supporté par le navigateur) contenu dans la page HTML. Vous devez donc analyser le contenu de la page HTML et en lire l'URL. Le code suivant utilise la bibliothèque HtmlAgilityPack (disponible en tant que package NuGet) pour analyser la page HTML et lire l'URL souhaitée:

string link = "https://finance.yahoo.com/r/4951f719-c8e1-3b1d-b4db-684ef6739b8e/iphone-x-5-reasons-to-wait?utm_source=yahoo&utm_medium=partner&utm_campaign=yahootix&partner=yahootix&yptr=yahoo&.tsrc=rss"; 
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(link); 
HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse(); 

using (var responseStream = myHttpWebResponse.GetResponseStream()) 
{ 
    using (var sr = new StreamReader(responseStream)) 
    { 
     //content of HTML page 
     var html = sr.ReadToEnd(); 

     //using HTMLAgilityPack library to parse HTML page 
     var htmlDocument = new HtmlAgilityPack.HtmlDocument(); 
     htmlDocument.LoadHtml(html); 

     //find URL in HTML page. Null-checks omitted for simplicity 
     var contentAttribute = htmlDocument.DocumentNode.SelectSingleNode("noscript/meta").Attributes["content"].Value; 
     var URL = contentAttribute.Split(';')[1];//skip "0;" in contentAttribute 
     URL = URL.Substring(4);//skip 'URL=' 
     URL = URL.Trim('\'');//remove surrounding ' 
    } 
}