[C#HttpHelper]官方产品发布与源码下载---苏飞版

时间:2022-01-07 17:33:37

转自:http://www.sufeinet.com/thread-3-1-1.html


                            C#HttpHelper官方产品发布与源码下载---苏飞版
导读部分
-------------------------------------------------------------------------------------------------------------
C#基类库苏飞版--系列教程导航
http://www.sufeinet.com/thread-655-1-1.html

                      本站是C#HttpHelper类唯一官方网站,唯一更新网站,希望大家收藏关注。
介绍
      C#HttpHelper实现了C#HttpWebRequest抓取时无视编码,无视证书,无视Cookie,并且实现的代理的功能,使用它您可以进行Get和Post请求,可以很方便 的设置Cookie证书代理编码问题您不用管,因为类会自动为您识别网页的编码。

       这个类是我以前写百度,Google,Soso,Sogou等网络蜘蛛时使用的,经过上千万个网站的测试,上万个网站抓取的例子总结出来的,中间的方法也是我实验了很久之后方案,所以大家可以放心使用。

        我不敢说100%,但是应该是99%的网站都没有问题,都可以无视编码,证书,和Cookie,如果你确实发现那个网站在使用本类过程中有问题,出现乱码,或者是获取不了,不能带Cookie,不能带证书等问题,我非常乐意您能联系我,提出您的问题,您也可以直接回复本帖子,我会第一时间进行解答。           
 反馈建议
邮件订阅更新(通过邮件订阅,当类有更新时会发送更新通知)

使用SVN获取:http://www.sufeinet.com/thread-7297-1-1.html
Httphelper代码在线预览


1.HttpHelper类下载


代码生成器: http://www.sufeinet.com/thread-3690-1-1.html    如果你不会使用类可以使用这个工具直接生成访问代码,非常方便
下载之前你首先要注册成为会员哦,注册之后就可以直接下载啦
以下是各个版本的HttpHelper类下载链接
以后HttpHelper类就不再提供多个版本了,只提供最新的Net2.0和4.0版本的。当然也有可能提供3.5或者是更高版本的,而不是像现在提供多个版本类,只对Net版本进行开发。希望大家喜欢
我相信这样功能会更全面一些。
.NET2.0版本表列      注意哦,如果不是本站注册会员是没有权限下载的

1.4正式版   [C#HttpHelper]官方产品发布与源码下载---苏飞版   HttpHelper-NotNet2.0-2014-05-13.rar (5.78 KB, 下载次数: 36302)    
  1. 更新了很多高端问题,优化的请求方式,是一个新技术跨越的版本
复制代码
.Net4.0 版本表列      注意哦,如果不是本站注册会员是没有权限下载的
1.0正式版 [C#HttpHelper]官方产品发布与源码下载---苏飞版 HttpHelper-NotNet4.0-2014-05-13.rar (5.38 KB, 下载次数: 5529)
  1. 本版本是Net4.0的第一个版本,功能远远超过2.0,并且使用最新最潮的技术,从性能和稳定性上有质的飞越
复制代码
更新报告
2014-04-21  1.4.5版发布可*切换IE代理
2014-02-08 关于默认不使用IE代理的重要更新
2014-01-17  V1.4.4发布
2013-11-20  关于Cookie的更新
2013-11-04 关于代理的重要更新   
2013-10-21 关于Cookie的重大更新
2013-10-12更新  教程与升级报告
2013-09-29更新 重要更新关于Cookie
2013-08-17更新  (主要是对核心实现代码进行优化)
2013-08-13更新  教程与升级报告
2013-04-29更新    教程与升级报告
2013-04-12更新    教程与升级报告
2013-02-07更新   教程与升级报告
2013-01-29更新  教程与升级报告
2013-01-07更新  教程与升级报告


相关链接

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%的都能取到,
[C#]  纯文本查看  复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
//取当前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代码

[C#]  纯文本查看  复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
/// <summary>
         /// 过滤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格式的问题

[C#]  纯文本查看  复制代码
?
01
02
03
04
05
06
07
08
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类使用方法

使用方法如下
[C#]  纯文本查看  复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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的写法

[C#]  纯文本查看  复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
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 , //编码格式(utf-8,gb2312,gbk)     可选项 默认类会自动识别
               //Encoding = Encoding.Default,
               Method = "post" , //URL     可选项 默认为Get
               Postdata = "user=123123&pwd=1231313"
           };
            //得到新的HTML代码
            result = http.GetHtml(item);

7.HttpHelper 设置Header参考的方法

[C#]  纯文本查看  复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
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
           };
           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;



下面我列出一些不能直接Add的参数
8 .HttpHelper 获取图片的方式
[C#]  纯文本查看  复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
HttpHelper http = new HttpHelper();
           HttpItem item = new HttpItem()
           {
               URL = "http://www.sufeinet.com" ,//URL     必需项
               Encoding = null , //编码格式(utf-8,gb2312,gbk)     可选项 默认类会自动识别
               //Encoding = Encoding.Default,
               ResultType = ResultType.Byte
           };
           //得到HTML代码
           HttpResult result = http.GetHtml(item);
           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;
       }

9.二次或多次使用Cookie的方式

字符串Cookie
[C#]  纯文本查看  复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
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
           };
           //得到HTML代码
           HttpResult result = http.GetHtml(item);
           item = new HttpItem()
          {
              URL = "http://tool.sufeinet.com" ,//URL这里都是测试URl   必需项
              Encoding = null , //编码格式(utf-8,gb2312,gbk)     可选项 默认类会自动识别
              //Encoding = Encoding.Default,
              Method = "get" , //URL     可选项 默认为Get
              Cookie = result.Cookie,
          };
           //得到新的HTML代码
           result = http.GetHtml(item);

CookieCollection类型的Cookie使用方法
[C#]  纯文本查看  复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
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
                ResultCookieType = ResultCookieType.CookieCollection
            };
            //得到HTML代码
            HttpResult result = http.GetHtml(item);
            item = new HttpItem()
            {
                URL = "http://tool.sufeinet.com" ,//URL这里都是测试URl   必需项
                Encoding = null , //编码格式(utf-8,gb2312,gbk)     可选项 默认类会自动识别
                //Encoding = Encoding.Default,
                Method = "get" , //URL     可选项 默认为Get
                CookieCollection = result.CookieCollection,
                ResultCookieType = ResultCookieType.CookieCollection
            };
            //得到新的HTML代码
            result = http.GetHtml(item);