我有一些问题下载网页的来源,我可以在任何浏览器中查看网页,我也可以运行网页蜘蛛并下载第一页没问题。每当我运行代码来获取该页面的源代码时,我总会得到403禁止错误。
一旦发送请求,就会返回403 forbidden错误。有人有什么想法吗?
__truediv__
答案 0 :(得分:2)
string uri = @"http://brownells.com";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
request.UserAgent = @"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36";
request.Accept = @"text/html";
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream))
{
Console.WriteLine (reader.ReadToEnd());
}
request.AutomaticDecompression
通知服务器我们(客户端)支持gzip
和Deflate
压缩方案,因此会有一些性能提升,但不需要,服务器只要求您设置UserAgent
和Accept
标头。
请记住,如果您可以在浏览器中执行此操作,则可以在C#中执行此操作,唯一一次您要认真挣扎的是,如果网站使用JavaScript设置Cookie的JavaScript法术,这种情况很少见,但它会发生
回到手头的话题......
如果要转储到文件,则需要使用文件流
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream))
using (TextWriter writer = new StreamWriter("filePath.html")
{
writer.Write(reader.ReadToEnd();
}