本库不推荐在 .NET Core 下使用
简单、易用、高效 一个有态度的开源.Net Http请求框架!
HttpCode.Core是HttpCode(https://github.com/msdn5/HttpCodeLib ) 的.net standard 2.0 实现,.net core、.net framework都可以使用,更改了异步方法的实现。
使用实例
类库基本功能:
- 基础功能1:基于HttpWebRequest方式 同步/异步 提交数据 包含(Get/Post)
- 基础功能2:集合常用处理方法.处理页面结果/HTML数据更快捷
HttpCode类库,让你感受一个简易到极致的HTTP编程. 让编程更简易,代码更简洁... 版权声明:
本类库完全开源,只是基于微软官方提供的HttpWebRequest实现同步与异步的请求 HttpCode Coding by 君临(https://github.com/msdn5) 09-27/2014
HttpCode.Core .net standard 2.0 implement by stulzq(xcmaster)09-01/2017
API文档: http://bbs.msdn5.com/forum.php?mod=forumdisplay&fid=37&filter=typeid&typeid=23
这是HttpCode的文档,大部分和HttpCode.Core是一样的,可以参考,但是有一些地方有差异,主要是异步方法,然后移除了Wininet Api
HttpCode.Core中的对象说明
- HttpHelpers 请求发起对象 请求过程与执行过程都在这个对象中.
- HttpItems 请求设置对象 请求时需要配置的参数都在这个对象中
- HttpResults 请求结果对象
1. HttpHelpers
HttpHelpers http = new HttpHelpers(); //发起请求具体对象 http.AsyncGetHtml(); //异步模式获取请求 http.GetHtml(请求设置参数对象); //获取请求结果,参数返回HttpResults(请求结果对象) http.GetImg(请求结果对象);//方法会根据请求结果返回一个Image对象
2. HttpItems
item.Accept;//请求标头值 如果没需要不用改动 默认为image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* item.Allowautoredirect //支持跳转页面,查询结果将是跳转后的页面 默认为true .如需获取跳转后的url请使用 HttpResults 中的属性: ResponseUrl //获取响应结果的URL(可获取自动跳转后地址) ,如果获取跳转后地址失败,请使用RedirectUrl属性,并设置HttpItems对象的Allowautoredirect =false; RedirectUrl //获取重定向的URL ;使用本属性时,请先关闭自动跳转属性;设置方法如下:设置HttpItems对象的Allowautoredirect =false; item.CerPath//证书绝对路径 如果模拟https时需要证书,则使用此属性附加证书. 详细使用 请参考 httpcode使用案例 如何使用httpcode访问https //使用方法参考 http://bbs.msdn5.com/thread-555-1-1.html item.Connectionlimit //最大连接数 默认1024 无特殊需要不必修改 item.Container //自动处理Cookie对象. //使用方法参考 http://bbs.msdn5.com/thread-552-1-1.html item.ContentType //请求返回类型默认 application/x-www-form-urlencoded 无特殊需要不必修改 item.Cookie //请求时的字符串类型Cookie 如果不使用自动维护cookie对象 每次使用cookie属性时请调用 new XJHTTP("上一次请求结果cookie","本次结果的cookie").UpdateCookie方法 更新cookie item.CookieCollection //请求时的CookieCollection 对象,可以从请求结果(HttpResults)的CookieCollection 对象中得到.每次需要赋值. item.Encoding //返回数据编码默认为NUll,可以自动识别 item.Expect100Continue //当该属性设置为 true 时,使用 POST 方法的客户端请求应该从服务器收到 100-Continue 响应,以指示客户端应该发送要发送的数据。此机制使客户端能够在服务器根据请求报头打算拒绝请求时,避免在网络上发送大量的数据 默认False item.Header//请求时的header对象; 获取某一项头 item.Header["请求头名称"].toString(); 例如 item.Header["Location"].toString(); //获取跳转后的地址,如果location不存在则异常 //设置新的头部数据 item.Header.Add("请求头名称","请求头具体值"); // 例如 item.Header.Add("自定义头部数据","http://bbs.msdn5.com"); item.IsAjax //异步标志 默认为false 如果数据包头有 X-Requested-With:XMLHttpRequest 则设置IsAjax为true item.IsToLower//是否设置为全文小写 默认false 无特殊需要不必修改 item.Method//请求方式 默认为GET方式 POST时需要修改为POST //使用方法参考 http://bbs.msdn5.com/thread-551-1-1.html item.Postdata//Post请求时要发送的字符串Post数据 //使用方法参考 http://bbs.msdn5.com/thread-551-1-1.html item.PostdataByte //Post请求时要发送的Byte类型的Post数据 默认仅设置item.Postdata即可,需要上传包时设置本属性. //使用方法参考 http://bbs.msdn5.com/thread-518-1-1.html item.PostDataType// Post的数据类型 默认为PostDataType.String;上传时需修改为Byte //使用方法参考 http://bbs.msdn5.com/thread-518-1-1.html item.ProxyIp // 代理 服务IP item.ProxyPwd //代理服务器密码 item.ProxyUserName //代理服务器用户名 item.ReadWriteTimeout//默认写入数据超时间 默认 30000 单位:毫秒 秒与毫秒的关系 1秒 = 1000毫秒 item.Referer //来源地址,上次访问地址 如非必要,不用填写 item.ResultType//设置返回类型String和Byte 默认String,请求图片或文件时选择Byte //使用方法参考 http://bbs.msdn5.com/thread-553-1-1.html item.Timeout //默认请求超时时间 默认3000 毫秒 item.URL //起请求的URL地址 必须填写 item.UserAgent //客户端访问信息默认Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0 如非必要,不用修改
3. HttpResults
HttpResults hr = new HttpResults(); //具体对象请调用httphelper.gethtml方法获取的请求后的结果对象 hr.Container //自动处理cookie对象 无需自行维护 hr.Cookie//请求返回的字符串cookie 下次请求时需要自行维护 hr.CookieCollection //请求返回的CookieCollection 下次请求时需要自行维护 hr.Header // 请求后的header对象,使用方法同httpitems hr.Html //请求后的结果 hr.RedirectUrl //请求跳转后的地址 获取本属性时,请确认httpitems.Allowautoredirect 为false hr.ResponseUrl//自动跳转后的url地址 获取本属性时,请确认httpitems.Allowautoredirect 为true hr.ResultByte //返回的Byte数组 只有ResultType.Byte时才返回数据,其它情况为空 //使用方法参考 http://bbs.msdn5.com/thread-553-1-1.html]http://bbs.msdn5.com/thread-553-1-1.html hr.StatusCode //Http请求后的状态码 hr.StatusDescription //请求后的状态信息
使用HttpCode.Core发起Get请求
- 方法一 使用HttpHelpers类获取结果
string url = "bbs.msdn5.com";//请求地址 string res = string.Empty;//请求结果,请求类型不是图片时有效 System.Net.CookieContainer cc = new System.Net.CookieContainer();//自动处理Cookie对象 HttpHelpers helper = new HttpHelpers();//发起请求对象 HttpItems items = new HttpItems();//请求设置对象 HttpResults hr = new HttpResults();//请求结果 items.URL = url; //设置请求地址 items.Container = cc;//自动处理Cookie时,每次提交时对cc赋值即可 hr = helper.GetHtml(items);//发起请求 res = hr.Html;//得到请求结果
- 方法二 使用XJHTTP类获取结果
XJHTTP xjhttp = new XJHTTP(); CookieContainer cc = new CookieContainer();//自动处理cookie string referer = "www.msdn5.com"; //referer头数据,如果没有请留空 string postdata = "这里是提交的数据"; //post提交数据 HttpResults hr = xjhttp.PostHtml(PostUrl, referer, postdata, false, cc); 参数说明: xjhttp.PostHtml("提交的url", "Referer数据头","提交的数据", "Ajax标志不需要时请填写false", "自动处理Cookie对象");
使用HttpCode.Core发起Post请求
- 方法一: 使用HttpHelpers类获取结果
string url = "bbs.msdn5.com";//请求地址 string res = string.Empty;//请求结果,请求类型不是图片时有效 string pdata = "post时所需要的数据";//提交数据(必须项) System.Net.CookieContainer cc = new System.Net.CookieContainer();//自动处理Cookie对象 HttpHelpers helper = new HttpHelpers();//发起请求对象 HttpItems items = new HttpItems();//请求设置对象 HttpResults hr = new HttpResults();//请求结果 items.URL = url;//请求的url地址 items.Referer = "referer如果有请携带"; //referer头,如果需要请填写 items.Container = cc;//自动处理Cookie时,每次提交时对cc赋值即可 items.Postdata = pdata;//提交的数据 items.Method = "Post";//设置提交方式为post方式提交(默认为Get方式提交) hr = helper.GetHtml(items);//发起请求并获得结果 res = hr.Html;//得到请求结果
- 方法二: 使用XJHTTP类获取结果
XJHTTP xjhttp = new XJHTTP(); CookieContainer cc = new CookieContainer();//自动处理cookie string referer = "www.msdn5.com"; //referer头数据,如果没有请留空 string postdata = "这里是提交的数据"; //post提交数据 HttpResults hr = xjhttp.PostHtml(PostUrl, referer, postdata, false, cc); 参数说明: xjhttp.PostHtml("提交的url", "Referer数据头","提交的数据", "Ajax标志不需要时请填写false", "自动处理Cookie对象");
如何为httpcode 设置字符串Cookie与自动维护字符串Cookie
自动维护就是指根据每次请求的Response返回的Cookie,来对本地的Cookie进行更新
- 手动维护Cookie
HttpItems items = new HttpItems();//请求设置对象 HttpHelpers helper = new HttpHelpers();//发起请求对象 HttpResults hr = new HttpResults();//请求结果对象 string cookie = "";//字符串方式处理 items = new HttpItems(); //初始化请求对象,使其保持最新状态 items.Cookie = cookie; //使用字符串方式 items.Url = "http://www.163.com/opt.php?do=login"; //请求URL地址 items.Referer = "http://mrtx.163.com/"; //请求的Referer items.Method = "Post";//请求方式 Post items.Postdata = "username=ceshiyixia1&password=111111";//提交参数 hr = helper.GetHtml(items); //正常模式得到请求结果 //手动处理字符串Cookie方式 每次都需要剔除返回的hr.Cookie,并且需要与原先的cookie合并为新的Cookie string CookieStr = new XJHTTP().ClearCookie(hr.Cookie); //首先,剔除 服务器返回cookie中的无用项 cookie = new XJHTTP().UpdateCookie(CookieStr, hr.Cookie);//接着手动合并两个Cookie ,组成新的cookie给字符串对象使用 //第二次请求 items = new HttpItems(); items.Url = "http://mrtx.u193.com/"; items.Referer = "http://mrtx.u193.com/"; items.Cookie = cookie; hr = helper.GetHtml(items);
- 自动维护字符串Cookie
HttpItems items = new HttpItems();//请求设置对象 HttpHelpers helper = new HttpHelpers();//发起请求对象 HttpResults hr = new HttpResults();//请求结果对象 string cookie = "";//字符串方式处理 items = new HttpItems(); //初始化请求对象,使其保持最新状态 items.Cookie = cookie; //使用字符串方式 items.URL = "http://www.163.com/opt.php?do=login"; //请求URL地址 items.Referer = "http://mrtx.163.com/"; //请求的Referer items.Method = "Post";//请求方式 Post items.Postdata = "username=ceshiyixia1&password=111111";//提交参数 #region 自动处理字符串Cookie方式(新) //使用ref将cookie传递进 GetHtml 重载方法 每次会 自动合并 上次 与 本次返回的cookie hr = helper.GetHtml(items,ref cookie); #endregion //多次请求 items = new HttpItems(); items.URL = "http://mrtx.u193.com/"; items.Referer = "http://mrtx.u193.com/"; items.Cookie = cookie; //注意 如果有其他请求 请使用以下调用方式,保持cookie每次被自动合并 hr = helper.GetHtml(items,ref cookie);
- 手动处理Cookie的几种常用方式:
new XJHTTP().UpdateCookie("旧Cookie", "请求后的Cookie");//合并Cookie,将cookie2与cookie1合并更新 返回字符串类型Cookie new XJHTTP().StringToCookie("网站Domain", "字符串Cookie内容");//将文字Cookie转换为CookieContainer 对象 new XJHTTP().CookieTostring("CookieContainer 对象");//将 CookieContainer 对象转换为字符串类型 new XJHTTP().GetAllCookie("CookieContainer 对象");//得到CookieContainer中的所有Cookie对象集合,返回List<Cookie> new XJHTTP().GetCookieByWininet("网站Url");//从Wininet 中获取字符串Cookie 可获取IE与Webbrowser控件中的Cookie new XJHTTP().GetAllCookieByHttpItems("请求设置对象");//从请求设置对象中获取Cookie集合,返回List<Cookie> new XJHTTP().ClearCookie("需要处理的字符串Cookie");//清理string类型Cookie.剔除无用项返回结果为null时遇见错误. new XJHTTP().SetIeCookie("设置Cookie的URL", "需要设置的Cookie");//可设置IE/Webbrowser控件Cookie new XJHTTP().CleanAll();//清除IE/Webbrowser所有内容 (注意,调用本方法需要管理员权限运行) CleanHistory();清空历史记录 CleanCookie(); 清空Cookie CleanTempFiles(); 清空临时文件
更多介绍与示例,请看在线文档:http://bbs.msdn5.com/forum.php?mod=forumdisplay&fid=37&page=1&filter=typeid&typeid=23