2017-02-08 20 views
0

我试图通过代码来获取一个网页的HTML版本:获得403异常抓取网页编程,即使网页是通过浏览器

 WebRequest r = WebRequest.Create(szPageURL); 
     WebClient client = new WebClient(); 
     try 
     { 
      WebResponse resp = r.GetResponse(); 
      StreamReader sr = new StreamReader(resp.GetResponseStream()); 
      szHTML = sr.ReadToEnd(); 
     } 

当我使用像www.microsoft网址,此代码工作.com,www.google.com或www.nasa.gov。但是,当我放入www.epa.gov(在URL参数中使用'http'或'https')时,执行r.GetResponse()时会得到403异常。但是我可以在浏览器中手动轻松获取页面。我得到的异常是403(禁止),异常状态成员说“ProtocolError”。那是什么意思?为什么我在一个实际可用的页面上获取此信息?有人有主意吗?谢谢!

顺便说一句 - 我也试过这样:

 string downloadString = client.DownloadString(szPageURL); 

得到完全相同的例外。

回答

0

试试这个代码,它的工作原理:

string Url = "https://www.epa.gov/"; 
CookieContainer cookieJar = new CookieContainer(); 
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url); 
request.CookieContainer = cookieJar; 
request.Accept = @"text/html, application/xhtml+xml, */*"; 
request.Referer = @"https://www.epa.gov/"; 
request.Headers.Add("Accept-Language", "en-GB"); 
request.UserAgent = @"Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)"; 
request.Host = @"www.epa.gov"; 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
String htmlString; 
using (var reader = new StreamReader(response.GetResponseStream())) 
{ 
htmlString = reader.ReadToEnd(); 
} 
+0

谢谢!所以基本上我的代码不起作用,因为它相当于将浏览器设置为不接受cookie然后尝试访问该页面? – lerxst3