Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取403异常以编程方式获取网页,即使网页可通过浏览器访问_C#_.net_Webclient_Webclient Download - Fatal编程技术网

C# 获取403异常以编程方式获取网页,即使网页可通过浏览器访问

C# 获取403异常以编程方式获取网页,即使网页可通过浏览器访问,c#,.net,webclient,webclient-download,C#,.net,Webclient,Webclient Download,我试图通过代码获取页面的HTML: WebRequest r = WebRequest.Create(szPageURL); WebClient client = new WebClient(); try { WebResponse resp = r.GetResponse(); StreamReader sr = new StreamReader(resp.GetResponseStream()); szHTML = sr.ReadToEnd(); } 当我使用诸如w

我试图通过代码获取页面的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();
}

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