网页下载

时间:2015-05-10 00:44:30

标签: c#

我有一些问题下载网页的来源,我可以在任何浏览器中查看网页,我也可以运行网页蜘蛛并下载第一页没问题。每当我运行代码来获取该页面的源代码时,我总会得到403禁止错误。

一旦发送请求,就会返回403 forbidden错误。有人有什么想法吗?

__truediv__

1 个答案:

答案 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通知服务器我们(客户端)支持gzipDeflate压缩方案,因此会有一些性能提升,但不需要,服务器只要求您设置UserAgentAccept标头。

工作的工具......

请记住,如果您可以在浏览器中执行此操作,则可以在C#中执行此操作,唯一一次您要认真挣扎的是,如果网站使用JavaScript设置Cookie的JavaScript法术,这种情况很少见,但它会发生

回到手头的话题......

  1. 下载Fiddler,它是一个Web调试代理,在调试HTTP流量时非常有用。安装并运行它。
  2. 导航到您选择的网站。
  3. 查看fiddler以查看您的浏览器发送的请求,然后查看服务器响应的内容...
  4. 使用C#
  5. 复制它

    Link to the image below enter image description here

    修改

    如果要转储到文件,则需要使用文件流

    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();
    }