C#HttpHelper爬虫类源码分享--苏飞版

本文介绍了C#编写的HttpHelper爬虫类,该类能够处理编码、证书和Cookie,支持免费开源。文章提供了类的下载链接、在线代码生成器、原理介绍、教程和示例,同时也分享了如何在WebBrowser中获取Cookie以及设置URL格式等技巧。HttpHelper类适用于各种Http访问,包括Post和Get方式,还可带Cookie和证书,并支持代理设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

  C#HttpHelper实现了C#HttpWebRequest抓取时无视编码,无视证书,无视Cookie,并且实现的代理的功能,使用它您可以进行Get和Post请求,可以很方便 的设置Cookie,证书,代理,编码问题您不用管,因为类会自动为您识别网页的编码。
   这个类是我以前写百度,Google,Soso,Sogou等网络蜘蛛时使用的,经过上千万个网站的测试,上万个网站抓取的例子总结出来的,中间的方法也是我实验了很久之后方案,所以大家可以放心使用。

    我不敢说100%,但是应该是99%的网站都没有问题,

都可以无视编码,证书,和Cookie,如果你确实发现那个网站在使用本类过程中有问题,出现乱码,或者是获取不了,不能带Cookie,不能带证书等问题,我非常乐意您能联系我,提出您的问题,您也可以直接回复本帖子,我会第一时间进行解答。
本类永久开源免费,万能框架,只是使用Httphelper类写出来的一个作品,和类本身没有关系,大家不会误会哦! Httphelper类是免费的,收费的是使用Httphelper类写出的万能框架!

Httphelper类源码下载:http://www.sufeinet.com/thread-3-1-1.html
Httphelper类在线代码生成器:http://www.sufeinet.com/thread-3690-1-1.html
Httphelper类原理:http://www.sufeinet.com/thread-6-1-1.html
Httphelper类教程:http://www.sufeinet.com/forum.ph ... action=view&ctid=23
Httphelper类例子:http://www.sufeinet.com/forum.ph ... action=view&ctid=22
HttpCookieHelper帮助类:http://www.sufeinet.com/thread-2382-1-1.html
Httphelper头信息(ContentType)默认为text/html无懈可击

2.在webBrowser中取Cookie的方法
在很多情况下我们会使用间进程的webBrowser去实现一些网页的请求和抓去,这个时候有部分网页是取不到Cookie的,那怎么办呢?下面我提供一个方法,应该99%的都能取到,


//取当前webBrowser登录后的Cookie值   
        [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
        static extern bool InternetGetCookieEx(string pchURL, string pchCookieName, StringBuilder pchCookieData, ref int pcchCookieData, int dwFlags, object lpReserved);
        //取出Cookie,当登录后才能取    
        private static string GetCookieString(string url)
        {
            // Determine the size of the cookie      
            int datasize = 256;
            StringBuilder cookieData = new StringBuilder(datasize);
            if (!InternetGetCookieEx(url, null, cookieData, ref datasize, 0x00002000, null))
            {
                if (datasize < 0)
                    return null;
                // Allocate stringbuilder large enough to hold the cookie    
                cookieData = new StringBuilder(datasize);
                if (!InternetGetCookieEx(url, null, cookieData, ref datasize, 0x00002000, null))
                    return null;
            }
            return cookieData.ToString();
        }```  
**3.去掉所有的Html代码**

///

    /// 过滤html标签
    /// </summary>
    /// <param name="strHtml">html的内容</param>
    /// <returns></returns>
    public static string StripHTML(string stringToStrip)
    {
        // paring using RegEx           //
        stringToStrip = Regex.Replace(stringToStrip, "</p(?:\\s*)>(?:\\s*)<p(?:\\s*)>", "\n\n", RegexOptions.IgnoreCase | RegexOptions.Compiled);
        stringToStrip = Regex.Replace(stringToStrip, "", "\n", RegexOptions.IgnoreCase | RegexOptions.Compiled);
        stringToStrip = Regex.Replace(stringToStrip, "\"", "''", RegexOptions.IgnoreCase | RegexOptions.Compiled);
        stringToStrip = StripHtmlXmlTags(stringToStrip);
        return stringToStrip;
    }
    private static string StripHtmlXmlTags(string content)
    {
        return Regex.Replace(content, "<[^>]+>", "", RegexOptions.IgnoreCase | RegexOptions.Compiled);
    }```  

方法如上面所示直接调用StripHTML方法就行了
4.设置URl格式的问题


public static string URLDecode(string text)
       {
           return HttpUtility.UrlDecode(text, Encoding.Default);
       }
       public static string URLEncode(string text)
       {
           return HttpUtility.UrlEncode(text, Encoding.Default);
       }```  
**5.HttpHelper类使用方法**

HttpHelper http = new HttpHelper();

        HttpItem item = new HttpItem()
        {
            URL = "http://www.sufeinet.com",//URL     必需项
            Encoding = null,//编码格式(utf-8,gb2312,gbk)     可选项 默认类会自动识别
            //Encoding = Encoding.Default,
            Method = "get",//URL     可选项 默认为Get
            Timeout = 100000,//连接超时时间     可选项默认为100000
            ReadWriteTimeout = 30000,//写入Post数据超时时间     可选项默认为30000
            IsToLower = false,//得到的HTML代码是否转成小写     可选项默认转小写
            Cookie = "",//字符串Cookie     可选项
            UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",//用户的浏览器类型,版本,操作系统     可选项有默认值
            Accept = "text/html, application/xhtml+xml, */*",//    可选项有默认值
            ContentType = "text/html",//返回类型    可选项有默认值
            Referer = "http://www.sufeinet.com",//来源URL     可选项
            Allowautoredirect = true,//是否根据301跳转     可选项
            CerPath = "d:\\123.cer",//证书绝对路径     可选项不需要证书时可以不写这个参数
            Connectionlimit = 1024,//最大连接数     可选项 默认为1024
            Postdata = "C:\\PERKYSU_20121129150608_ScrubLog.txt",//Post数据     可选项GET时不需要写
            PostDataType = PostDataType.FilePath,//默认为传入String类型,也可以设置PostDataType.Byte传入Byte类型数据
            ProxyIp = "192.168.1.105:8015",//代理服务器ID 端口可以直接加到后面以:分开就行了    可选项 不需要代理 时可以不设置这三个参数
            ProxyPwd = "123456",//代理服务器密码     可选项
            ProxyUserName = "administrator",//代理服务器账户名     可选项
            ResultType = ResultType.Byte,//返回数据类型,是Byte还是String
            PostdataByte = System.Text.Encoding.Default.GetBytes("测试一下"),//如果PostDataType为Byte时要设置本属性的值
            CookieCollection = new System.Net.CookieCollection(),//可以直接传一个Cookie集合进来
        };
        item.Header.Add("测试Key1", "测试Value1");
        item.Header.Add("测试Key2", "测试Value2");
        //得到HTML代码
        HttpResult result = http.GetHtml(item);
        //取出返回的Cookie
        string cookie = result.Cookie;
        //返回的Html内容
        string html = result.Html;
        if (result.StatusCode == System.Net.HttpStatusCode.OK)
        {
            //表示访问成功,具体的大家就参考HttpStatusCode类
        }
        //表示StatusCode的文字说明与描述
        string statusCodeDescription = result.StatusDescription;
        //把得到的Byte转成图片
        Image img = byteArrayToImage(result.ResultByte);
    }
    /// <summary>
    /// 字节数组生成图片
    /// </summary>
    /// <param name="Bytes">字节数组</param>
    /// <returns>图片</returns>

private Image byteArrayToImage(byte[] Bytes)

    {
            MemoryStream ms = new MemoryStream(Bytes);
            Image outputImg = Image.FromStream(ms);
            return outputImg;
    }}```  

本例子是一个统一的标准写法,大家可以根据需要自行修改,在下面还会有对特定功能的说明请大家继续看
6.最简单的Post与Get的写法


HttpHelper http = new HttpHelper();
           HttpItem item = new HttpItem()
           {
               URL = "http://www.sufeinet.com",//URL这里都是测试     必需项
               Method = "get",//URL     可选项 默认为Get
           };
           //得到HTML代码
           HttpResult result = http.GetHtml(item);
           item = new HttpItem()
          {
              URL = "http://tool.sufeinet.com",//URL这里都是测试URl   必需项
              Encoding = null,//编码格
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值