从URL抓取HTML不会;没有任何提示

本文关键字:任何 提示 不会 URL 抓取 HTML | 更新日期: 2023-09-27 18:22:20

我在C#中尝试了几种使用webclient和webresponse的方法,它们都返回

<html><head><meta http-equiv='"REFRESH'" content='"0; URL=http://www.windowsphone.com/en-US/games?list=xbox'"><script type='"text/javascript'">function OnBack(){}</script></head></html>"

而不是使用浏览器转到时实际呈现的页面http://www.windowsphone.com/en-US/games?list=xbox

您将如何从该位置获取HTML?http://www.windowsphone.com/en-US/games?list=xbox

谢谢!

/编辑:添加的示例:

尝试:

        string inputUrl = "http://www.windowsphone.com/en-US/games?list=xbox";
        string resultHTML = String.Empty;
        Uri inputUri = new Uri(inputUrl);
        WebRequest request = WebRequest.CreateDefault(inputUri);
        request.Method = "GET";
        WebResponse response;
        try
        {
            response = request.GetResponse();
            using (StreamReader reader = new StreamReader(response.GetResponseStream()))
            {
                resultHTML = reader.ReadToEnd();
            } 
        }
        catch { }

尝试:

        string inputUrl = "http://www.windowsphone.com/en-US/games?list=xbox";
        string resultHTML = String.Empty;
        WebClient webClient = new WebClient();
        try
        {
            resultHTML = webClient.DownloadString(inputUrl);
        }
        catch { }

尝试:

        string inputUrl = "http://www.windowsphone.com/en-US/games?list=xbox";
        string resultHTML = String.Empty;
        WebResponse objResponse;
        WebRequest objRequest = HttpWebRequest.Create(inputUrl);
        try
        {
            objResponse = objRequest.GetResponse();
            using (StreamReader sr = new StreamReader(objResponse.GetResponseStream()))
            {
                resultHTML = sr.ReadToEnd();
                sr.Close();
            }
        }
        catch { }

从URL抓取HTML不会;没有任何提示

我检查了这个URL,您需要解析cookie。

当您第一次尝试访问该页面时,会将您重定向到login.live.com上的https URL,然后重定向回原始URL。https页面为域login.live.com设置了一个名为MSPRequ的cookie。如果您没有此cookie,则无法访问该网站。

我尝试在浏览器中禁用cookie,结果它无限循环回URL https://login.live.com/login.srf?wa=wsignin1.0&rpsnv=11&checkda=1&ct=1328303901&rver=6.1.6195.0&wp=MBI&wreply=http:%2F%2Fwww.windowsphone.com%2Fen-US%2Fgames%3Flist%3Dxbox&lc=1033&id=268289。它已经持续了几分钟了,而且似乎永远不会停止。

因此,当设置好cookie时,您必须从https页面获取该cookie,并为后续请求保留该cookie。

这可能是因为请求HTML的服务器根据用户代理字符串返回不同的HTML。你可以试试这种

webClient.Headers.Add ("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");

这个特定的头可能不起作用,但您可以尝试其他模仿标准浏览器的头。