开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 6085|回复: 8
收起左侧

[C#源码] HttpCode框架v3.9.16.10.24 一个有态度的开源.Net Http请求框架

[复制链接]
结帖率:50% (1/2)
发表于 2017-2-23 23:20:56 | 显示全部楼层 |阅读模式   新疆维吾尔自治区巴音郭楞蒙古自治州
         简单、易用、高效 一个有态度的开源.Net Http请求框架!


      类库基本功能:
      基础功能1:基于HttpWebRequest方式 同步/异步 提交数据 包含(Get/Post)
      基础功能2:基于Wininet系统API方式提交数据 包含(Get/Post)
      基础功能3:集合常用处理方法.处理页面结果/HTML数据更快捷

      HttpCode类库,让你感受一个简易到极致的HTTP编程.
       让编程更简易,代码更简洁...
      版权声明:
      本类库完全开源,类库使用两种方式实现请求;
           1.基于微软官方提供的HttpWebRequest实现同步与异步的请求
           2.基于底层Wininet进行封装;
      Coding by 君临
      

      源码开发环境: vs 2010
      (vs 05-08无法支持C#4.0新语法,部分方法携带默认值会出现异常,请使用Vs2010 + 版本进行编译)


      最新源码+Demo下载地址
                      HttpCodeLib_v3.9.16.10.24.zip

                     GitHub 地址 https://github.com/msdn5/HttpCodeLib                 
                     
                       使用手册以及常见问题

      使用HttpCode时,请先引用
      System.Web (Framework 2.0/4.0 都需要添加)
      System.Configuration(Framework 2.0/4.0 都需要添加)


      注意:
      System.Web.Extensions(Framework 2.0不需要,4.0如需使用Json转换请自行删除注释,并添加引用})   


      123.png


  1. 10/24/2016
  2.            * 修正长度为0时的编码解析错误.
  3.            * 增加HttpItems中 AutoRedirectMax 如果返回内容为 :  如提示"尝试自动重定向的次数太多" 请设置本属性为true
  4.            * 更改默认UserAgent为 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.9 Safari/537.36
  5.            * 修正冗余,拆分对象方便维护

  6.                      10/09/2016
  7.                       * 修改懒人方法增加默认超时时间 默认15秒
  8.                       * 增加Base64图片解析 使用时需要创建 XJHTTP对象 (可直接请求base64结构图片)
  9. 例如:
  10. xj.GetBase64Image("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAvElEQVQ4T2NkoBAwIukXALL9gViBgJkPgPIbgfgDSB2yAQVAfj+RDioEqpuAbkADUKAeiB0JGLIfKN8IxCD1KC6AGYDsqgtANf+B2BDJUBCfaAM2QDUGkGMAcpjA/Qx1EVEugHkJZDlcA7EGgKJSHi0wHwL5D4g1wAGoEISRwQEgB4SJCkSQZns0Aw6SYgDICyCMDEDOJ8oL6E5HMwfsDayxQHFSBmUmUIJBdzq6C0DeWAATRE626AqJ4gMAKh82EQu8MAEAAAAASUVORK5CYII="    方法返回Image对象.

  11.                       * 修正ClearCookie方法 会删除一些有用数据
  12.                       * 增加HttpResult 中RawCookie 原始Cookie对象.此对象作为未清理前的Cookie数据.
  13.                       * 修正 对方网站出现错误引发的编码识别错误





  14.                      01/07/2016
  15.       * 重载懒人方法 一键请求,增加代理
  16.       * 修正 httpresults没有被初始化的bug.
  17.       * 修正 使用字符串Cookie自动维护时,没有将新内容传递给 httpresults对象
  18.       * 修正异步方法自动处理字符串cookie Bug
  19.       24-05/2016
  20.       !!!!重构内核!!!!
  21.       修正所有冗余内核代码.
  22.       同步/异步均采用相同逻辑处理.
  23.       加强网页编码识别能力
  24.       重构HTML/Unicode编码解析方法
  25.       优化数据解析/数据提取方法
  26.       优化所有模块,清除所有冗余代码逻辑更清晰!
  27.       
  28.       修正 "服务器提交了协yi冲突. Section=ResponseHeader Detail=CR 后面必须是 LF"问题
  29.       【解决方案】服务器提交了协yi冲突. Section=ResponseHeader Deta...
  30.       [url=http://bbs.msdn5.com/thread-1125-1-1.html]http://bbs.msdn5.com/thread-1125-1-1.html[/url]


  31.       修正 "从传输流收到意外的 EOF 或 0 个字节 "
  32.       【解决方案】从传输流收到意外的 EOF 或 0 个字节
  33.       [url=http://bbs.msdn5.com/thread-1126-1-1.html]http://bbs.msdn5.com/thread-1126-1-1.html[/url]




  34.       16-04/2016
  35.       更新冗余,
  36.       修正多线程下并发问题.
  37.       修正编码解码核心代码...
  38.       20-01/2016
  39.       修正编码识别的一个小bug.
  40.       去除Json转换默认引用,需要时请自行开放.
  41.       11-27/2015
  42.       增加PostEncoding 允许自定义Post提交数据时的编码.
  43.       //例
  44.       items.PostEncoding=Encoding.UTF8; //设置提交请求时编码为UTF8 注意,默认为Default,如非必要请勿修改
  45.       修正异步请求时超时BUG
  46.       修正异常处理BUG
  47.       11-15/2015
  48.       修正 编码解析异常时Bug 感谢 不懂 635****0 反馈
  49.       增加 获取服务器时间方法(从响应头中获取Date头数据)
  50.       增加 GMT时间与本地时间互转方法
  51.       增加 API 设置本地电脑时间
  52.       增加 API 获取本地地电脑时间
  53.       增加 急速请求(仅返回请求头,不解析与请求具体数据)
  54.       07-11-2015
  55.       修正 编码识别的正确率(减少更多识别错误导致的web乱码)
  56.       修改 HttpItems 对象增加Encoding对象 设置(如果不指定,默认为每次自动识别网页编码 如非必要请勿修改)
  57.       修改 HttpItems 原本对象Encoding字符串为EncodingStr 支持以字符串方式获取编码类型.
  58.       04/11-2015
  59.       修正 无视编码时个别请求错误无法直接识别bug
  60.       修正 HttpHelpers异步请求时Bug.
  61.       修正 若干冗余
  62.       增加 自动处理字符串Cookie方法
  63.       增加 Wininet 方式 使用代理 请求图片
  64.       增加 Wininet 方式 使用代理 GET/POST
  65.       增加 Wininet 方式 允许添加自定义Cookie至请求(在JS产生Cookie时使用)
  66.       增加 以上几种方式至Demo
  67.       06-10/2015
  68.       修正 wininet Post提交问题.
  69.       修正 懒人方法一键Post[xjhttp] Bug
  70.       修正 Wininet 若干BUG(非重要修正)
  71.       增加 字符串Cookie使用Demo
  72.       增加 Wininet 自定义协yi头Demo
  73.       30-08/2015
  74.       修正 FromUnicodeString 中书写BUG.感谢 纳兰小寒 反馈
  75.       修正 iso-8859-1 编码为 utf8.
  76.       修正 Wininet代理方法重载为(GetHtmlPro方法)
  77.       修正 自动识别编码书写bug.
  78.       26-08/2015
  79.       修复自动获取编码的Bug.
  80.       新增Wininet 支持携带代理请求网页.
  81.       新增方法描述
  82.       ///

  83.        /// 重载提交数据(允许使用代理)
  84.        ///

  85.        /// 请求地址       /// 提交的数据(Get时为空)       /// 代理地址(IP:端口 例如 127.0.0.1:8888)       /// 设置cookie,例如 JS增加的cookie.如非需要可不填写       /// 设置数据头,如非需要可不填写       /// 是否允许跳转(允许3xx 跳转)       ///
  86.        public MemoryStream GetHtmlPro(string Url, string Postdata, string proxy = null, string subcookie = null, string subheader = null, bool isMoved = true)
  87.       26-07/2015
  88.       增加wininet 超时判断.
  89.       如果需要设置超时,请设置
  90.       WininetTimeOut 属性
  91.       设置后请求结果将返回 长度为零的字符串 ,即""字符.
  92.       默认不触发超时(WininetTimeOut 为0)
  93.       注意: 此方法非官方方法,官方wininet存在超时bug,使用Thread.Join来完成伪超时操作.
  94.       设置属性后每次请求都会阻塞 设置的毫秒数 .如非必要,请勿使用...
  95.       25-07/2015
  96.       修正 GetStringMid bug
  97.       修正 自动转换编码时转换错误bug
  98.       优化部分代码,去除冗余...
  99.       01-07/2015
  100.       修正异步代理超时bug
  101.       20-06 / 2015
  102.       新增 Right 方法 取文本右边
  103.       默认取出右边所有文本,如果需要取固定长度请设置 length参数
  104.       异常则返回空字符串
  105.       新增 Left 方法 取文本左边
  106.       默认取出左边所有文本,如果需要取固定长度请设置 length参数
  107.       异常则返回空字符串
  108.       优化 FromUnicodeString 方法, Unicode字符转汉字.
  109.       默认处理 \u7384\u673a\u8bba\u575b
  110.       如果遇到 &7384 &673a &8bba &575b 请对SplitString赋值为&
  111.       优化异常时读取异常页面代码方法.
  112.       优化部分冗余代码
  113.       11-06 /2015
  114.       *修改默认timeout为15s..
  115.       增加 文字Cookie添加到Container对象方法,不用再传递domain了.自动从stringcookie中分析 更新失败时,返回原来的CookieContainer对象
  116.       最后一个domain默认为"",自动从字符串cookie中获取,如果获取失败返回原来的Container对象,那么需要手动填写domain地址
  117.       方法名 AddCookieToContainer()
  118.       使用方法:
  119.       cc = AddCookieToContainer(cc,hr.Cookie);
  120.       cc 为当前自动处理cookie对象,
  121.       hr.Cookie 为当前请求后返回的字符串Cookie
  122.       优化部分代码
  123.       增加 Unicode编码转换的方法. FromUnicodeString
  124.       09-06/2015
  125.       *修复一个书写错误导致的bug..
  126.       07-06 /2015
  127.       修复 SetRequest 方法至 GetHttpRequestData() 为了准确捕获异常
  128.       增加 JsonToObject(Json转实体对象) ObjectToJson(实体对象转Json字符串) (Json转换为实体对象.实体对象请从 玄机宝盒转换代码)
  129.       仅Framework 4.0可用 需要自行引用命名空间 System.Web.Extensions
  130.       Framework 2.0 下请使用外部解析方法
  131.       增加 GetHtmlTitle(html数据) 提取网页Title
  132.       增加 GetMidHtml(原始Html,起始字符串,终止字符串) 取文本中间的其他写法
  133.       增加 ReplaceNewLine 过滤所有换行
  134.       增加 StripHTML 过滤html标签
  135.       增加 GetImgList 获取所有的Img标签
  136.       增加 GetAList 获取所有的A标签
  137.       增加 RunJsMethod 执行js代码(JS代码,参数,调用方法名,方法名[默认Eval 可选Run])
  138.       增加 HttpResults 中的属性:
  139.       
  140.        ResponseUrl 获取响应结果的URL(可获取自动跳转后地址) ,如果获取跳转后地址失败,请使用RedirectUrl属性,并设置HttpItems对象的Allowautoredirect =false;
  141.       
  142.        RedirectUrl 获取重定向的URL ;使用本属性时,请先关闭自动跳转属性;设置方法如下:设置HttpItems对象的Allowautoredirect =false;
  143.        20-05 /2015
  144.       修复 在Http1.0/Http1.1 协yi下 服务端遇到错误直接断开连接,此时类库只能获取到状态码,无法获取相信信息的bug
  145.       异步模式: AsyncResponseData / 同步模式: GetHttpRequestData 均修复此bug.
  146.       清理代码冗余数据.删除测试上传方法(已过时)
  147.       修正部分编码格式问题.
  148.       29-04/2015
  149.       增加 HttpItems 中的 Expect100Continue属性
  150.       属性介绍:
  151.       [url=https://msdn.microsoft.com/zh-cn]https://msdn.microsoft.com/zh-cn[/url] ... r.expect100continue(v=VS.80).aspx
  152.       08-05/2015
  153.       具体使用方法请见demo
  154.       新增 ClaerIECookie 删除IE Cookie
  155.       新增 SetIeCookie 设置IE Cookie
  156.        新增 OpenUrl(string url, int openType = 0) 方法说明:打开指定URL openType:0使用IE打开,!=0 使用默认浏览器打开
  157.       新增 RunCmd 方法 参数为CMD 调用的命令
  158.       调用 new() XJHTTP().ClaerIECookie()
  159.        new() XJHTTP().SetIeCookie()
  160.        new() XJHTTP().RunCmd()
  161.        new() XJHTTP().OpenUrl()
  162.       
  163.       如果失败,请自行执行以下语句:
  164.        //获取旧的Cookie 函数 例子
  165.        StringBuilder cookie = new StringBuilder(new String(' ', 2048));
  166.        int datasize = cookie.Length;
  167.        bool b = InternetGetCookie(GetUrl, null, cookie, ref datasize);
  168.        //删除旧的
  169.        foreach (string fileName in System.IO.Directory.GetFiles(System.Environment.GetFolderPath(Environment.SpecialFolder.Cookies)))
  170.        {
  171.        if (fileName.ToLower().IndexOf("expires") > 0)
  172.        {
  173.        System.IO.File.Delete("expires");
  174.        }
  175.        }
  176.        //设置新COOKIE 函数
  177.        参数说明
  178.        GetUrl: 需要设置COOKIE的URL
  179.        name: COOKIE split后的name
  180.        value:COOKIE split后的value
  181.        InternetSetCookie(GetUrl, name, value);
  182.        foreach (string c in NewCookie.Split(';'))
  183.        {
  184.        string[] item = c.Split('=');
  185.        string name = item[0];
  186.        string value = item[1] + ";expires=Sun,22-Feb-2099 00:00:00 GMT";
  187.        InternetSetCookie(GetUrl, name, value);
  188.        InternetSetCookie(GetUrl, name, value);
  189.        InternetSetCookie(GetUrl, name, value);
  190.        }
  191.       14-04/2015
  192.       修正 添加代理时不能使用 127.0.0.1:8888 这种方式 重构了下代码 感谢(永远的沉默 ofnhkb1(8224xxx))反馈
  193.       增加Demo中使用代理请求
  194.       所更新方法全部在XJHttp类中
  195.       增加 HttpResults 中的StatusCode StatusDescription 属性, 感谢(永远的沉默 ofnhkb1(8224xxx))反馈
  196.       StatusCode 用于获取当前请求的状态码.
  197.       StatusDescription 用户获取当前请求状态码描述.
  198.       当请求异常时 StatusCode:NotFound StatusDescription:异常信息描述
  199.       异步与同步都有这两个属性.
  200.       增加 GetString2Base64 转换普通字符串为base64
  201.       增加 GetStringbyBase64 转换base64字符串为普通字符串
  202.       //代理访问IP138获取当前IP
  203.       item = new HttpItems()
  204.        {
  205.        URL = "http://1111.ip138.com/ic.asp",
  206.        ProxyIp = "127.0.0.1:8888"
  207.        };
  208.        string info= http.GetHtml(item).Html;
  209.       所更新方法全部在XJHttp类中
  210.       增加 GetTime 方法;将时间戳转换为C#的DateTime,配合gettimebyjs
  211.       增加 Bytes2HexString 方法;将字节数组转化为十六进制字符串,每字节表示为两位
  212.       增加 HexToStr方法;将普通字符串转化为十六进制
  213.       增加 HexString2Bytes 方法;将十六进制字符串转化为字节数组
  214.       增加 GetAscii2string方法;将byte数组转换为AscII字符
  215.       修复上传文件bug.
  216.       取消测试上传文件方法
  217.       所更新方法全部在XJHttp类中
  218.       增加DownLoad方法[使用HttpCode] Get
  219.       增加WebClientDonwnLoad方法 Get
  220.       增加UploadPost方法 Post
  221.       修复请求异常bug.
  222.       修复Cookie处理Bug
  223.       08-12/2014
  224.       增加 " 取文本中间 "方法 GetStringMid
  225.       增加 "批量取文本中间" 方法 GetStringMids
  226.       增加 "url编码,url解码方法" UrlEncoding / UrlDecoding
  227.       增加 Webbrowser 获取Cookie到HttpCode使用方法Demo
  228.       30-11/2014
  229.       修正 Wininet 在framework 4.0下的"PInvoke调用导致堆栈不对称" 异常.
  230.       修正在异步模式中的Hander处理
  231.       修正异步模式中的Cookie处理
  232.       更改 获取Wininet的Cookie方法为 GetCookieByWininet
  233.       新增 字符串类型Cookie处理方法 ClearCookie 去除Cookie中的无用项.
  234.       增加一键获取JS时间戳方法 (13位) 更改GetTime 方法为 GetTimeByJs
  235.       增加一键获取C#时间戳方法(10位) 更改GetTimeStamp方法为 GetTimeByCSharp
复制代码



评分

参与人数 2好评 +1 精币 +2 收起 理由
web11234 + 2 感谢分享,很给力!~
进击 + 1 哎哟,不错哦~感谢开源!

查看全部评分

发表于 2017-4-10 10:40:34 | 显示全部楼层   四川省成都市
看到大R的干货,还是要来顶一下的
回复 支持 1 反对 0

使用道具 举报

结帖率:50% (1/2)
 楼主| 发表于 2017-3-3 00:45:33 | 显示全部楼层   新疆维吾尔自治区巴音郭楞蒙古自治州
web11234 发表于 2017-3-1 14:15
刚学习C#   我看你的demo 里POST/GET都是调用的GetHtml    GetHtmlPro这个是干嘛的 我看解释说是 重载提交 ...

问题1: GetHtmlPro 是对Wininet的重载,允许提交自定义头/添加代理信息等.
问题2:重载即方法名相同,参数个数不同..直白点的理解就是,一个一样的方法,但是另一个提供更多的参数扩展性被增强..
回复 支持 反对

使用道具 举报

结帖率:98% (45/46)
发表于 2017-3-1 14:15:14 | 显示全部楼层   河南省商丘市
刚学习C#   我看你的demo 里POST/GET都是调用的GetHtml    GetHtmlPro这个是干嘛的 我看解释说是 重载提交数据 大神 重载不是函数名一样的么
回复 支持 反对

使用道具 举报

结帖率:50% (1/2)
 楼主| 发表于 2017-2-24 15:33:46 | 显示全部楼层   新疆维吾尔自治区巴音郭楞蒙古自治州
Cand 发表于 2017-2-24 08:53
太高深,,,小白肿么办、、、

有详细使用手册.
回复 支持 反对

使用道具 举报

结帖率:100% (5/5)

签到天数: 4 天

发表于 2017-2-24 08:53:36 | 显示全部楼层   广东省揭阳市
太高深,,,小白肿么办、、、
回复 支持 反对

使用道具 举报

结帖率:50% (1/2)
 楼主| 发表于 2017-2-23 23:56:56 | 显示全部楼层   新疆维吾尔自治区巴音郭楞蒙古自治州
lazy心宿 发表于 2017-2-23 23:41
我想说,我在你们论坛也注册了,一直在用http库,支持了

与精易正式合作.
以后发布更新会同时哒.!

点评

我看出来了。。。   山西省大同市  发表于 2017-2-24 00:21
回复 支持 反对

使用道具 举报

结帖率:79% (30/38)

签到天数: 22 天

发表于 2017-2-23 23:41:02 | 显示全部楼层   山西省大同市
我想说,我在你们论坛也注册了,一直在用http库,支持了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表