从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,您需要解析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;)");
这个特定的头可能不起作用,但您可以尝试其他模仿标准浏览器的头。