获取 403 异常以编程方式获取网页,即使网页可通过浏览器访问
Getting 403 Exception fetching web page programmatically even though web page is available via browser
我正在尝试通过代码获取页面的 HTML:
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 这样的 URL 时,此代码有效。但是,当我输入 www.epa.gov(在 URL 参数中使用 'http' 或 'https')时,我在执行 r.GetResponse() 时收到 403 异常。然而,我可以轻松地在浏览器中手动获取页面。我得到的异常是 403(禁止),异常状态成员说 "ProtocolError"。那是什么意思?为什么我在实际可用的页面上看到这个?谁有想法?谢谢!
顺便说一句 - 我也尝试过这种方式:
string downloadString = client.DownloadString(szPageURL);
遇到完全相同的异常。
试试这个代码,它有效:
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();
}
我正在尝试通过代码获取页面的 HTML:
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 这样的 URL 时,此代码有效。但是,当我输入 www.epa.gov(在 URL 参数中使用 'http' 或 'https')时,我在执行 r.GetResponse() 时收到 403 异常。然而,我可以轻松地在浏览器中手动获取页面。我得到的异常是 403(禁止),异常状态成员说 "ProtocolError"。那是什么意思?为什么我在实际可用的页面上看到这个?谁有想法?谢谢!
顺便说一句 - 我也尝试过这种方式:
string downloadString = client.DownloadString(szPageURL);
遇到完全相同的异常。
试试这个代码,它有效:
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();
}