你的位置:首页 > ASP.net教程

[ASP.net教程]SD.Net (Http处理类;适合SDK、网页抓取、模拟请求)


该类有以下特性:
          
支持链式(Fluent API)操作;
          能够自动处理Cookie(支持所有链接自动共享Cookies,支持按域名自动发送Cookie,支持301/302跳转Cookie自动截取);
          支持HTTPS协议;
          支持证书;
          支持代理;
          支持Session会话保持;
          支持JSON/          支持JSONP内容自动识别为JSON;
          支持多文件上传与下载;
          支持自动GZIP;
          支持自动解析网页编码;
          支持响应转为文件、文本、图片、内存流、byte数组、反序列化成实体类;
          支持Jquery Dom查询(ToDom方法需要引入SD.Net.Html.dll);
 下个版本:
         【待开发】支持文件断点续传
         【待开发】支持异步编程
         【已完成】公开全局Cookie访问入口
 修改历史:
         [2016-01-14]:
             修复自动解码失败问题;
         [2015-11-27]:
             调整IHttpRequest接口定义,增加UseGlobalCookies属性,以支持所有实例共享Cookies
             调整IHttpRequest接口定义,增加AllowAutoRedirect属性,以支持控制是否自动重定向到最新的页面
             调整IHttpRequest接口定义,增加SetCookie(CookieCollection cookies)方法
             调整IHttpRequest接口定义,增加SetHeader(WebHeaderCollection headers)方法
             调整HttpClient,增加OnRequest,OnResponse方法
             新增CookieStore 管理全局Cookie
             去除 ActionUrl和BaseUrl ,定义为 Url
         [2015-10-10]:
             调整IHttpRequest接口定义,增加Clone方法
         [2015-09-29]:
             调整IHttpRequest接口定义,增加Set,SetHeader,SetCookie方法
         [2015-09-22]:
             调整IHttpRequest接口定义,增加SetBody,ClearXX,OnRequest,OnResponse,Go方法,去除SetObject方法,调整部分函数定义支持         [2015-09-18]:
             增加IHttpResponse接口,扩展类获取文本,File,Stream,Bytes类型的数据的的方法
         [2015-06-21]:
             基础类构建完成

 示例代码:
         【注】:以下 http://www.demo.com/ 网址需要换成实际网址。
        
         [示例1]:
             var http = HttpClient.Create();
             var txt1 = http.Go("http://www.demo.com/").GetResponse().ToText();
             var json = http.Go("http://www.demo.com/http/Porudct/1").GetResponse().ToType(typeof(Porudct));
             var img1 = http.Go("http://www.demo.com/img/logo.png").GetResponse().ToImage();
             /*      */ http.Go("http://www.demo.com/img/logo.png").GetResponse().ToFile("C:/1.jpg");
            
         [示例2]:
             var dom   = HttpClient.Create("https://www.baidu.com/s?wd=a").ToDom();
             var title = dom.Find("title:first").Text();                                             //title:a_百度搜索
             var list  = dom.Find("#content_left h3.t").Select(p=>p.InnerText).ToList();             //list:所有搜索的链接标题
             var list  = dom.Find("#content_left h3.t").Elements.Select(p => p.InnerText).ToList();  //list:所有搜索的链接标题
            
         [示例3]:
             var login = HttpClient.Create("http://www.demo.com/Login", "POST")
                .SetParameter(new
                {
                    LoginAccount = "/*账户*/",
                    LoginPassword = "/*密码*/"
                })
                .SetParameter("VerifyCode","/*验证码*/")
                .SetHeader("Client-ID","0")
                .GetResponse()
                .ToText();
            var home = HttpClient.Create("http://www.demo.com", "GET")
                .GetResponse()
                .ToText();
            //
            var title = JQuery.Create(home).Find("head > title:first").Text();
            
         [示例4]:
             var form = HttpClient.Create("http://www.demo.com/User/Save", "POST")
                .SetParameter(new
                {
                    ID = 1,
                    Name = "Jom",
                    Data=new { A="小",B="未设定",C=0 }
                })
                .SetFile("Photo","C:/1.jpg")
                .GetResponse()
                .ToText();