# HttpLib **Repository Path**: zack_hui/HttpLib ## Basic Information - **Project Name**: HttpLib - **Description**: 便捷的Http库 - **Primary Language**: C# - **License**: MIT - **Default Branch**: HttpClient - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2023-04-16 - **Last Updated**: 2023-04-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # HttpLib 便捷的Http库 如果你喜欢 HttpLib 项目,请为本项点亮一颗星 ⭐! ## 🖥支持环境 - .NET 6.0及以上。 - .NET Core3.1及以上。 - .NET Standard2.0及以上。 ## 🌴支持 #### multipart/form-data 既可以上传文件等二进制数据,也可以上传表单键值对 #### 上传与下载进度回调 上传与下载的进度监控 #### 支持缓存 类似图片加载场景,同一个id的图片通过磁盘存储减少网络开支 #### 工厂创建 >默认关闭 使用 `HttpClientFactory` 池,可以最大程度上节省系统重复请求开支 ``` csharp Config.UsePool = true; ``` **** ## ✨示例 * [创建请求](#创建请求) * [添加参数](#添加参数) * [添加请求头](#添加请求头) * [启用重定向](#启用重定向) * [设置超时时长](#设置超时时长) * [设置编码](#设置编码) * [设置缓存](#设置缓存) * [请求之前处理](#请求之前处理) * [请求之后处理](#请求之后处理) * [注入回调获取进度](#注入回调获取进度) * [上传](#上传) * [下载](#下载) * [请求](#请求) * [实例1](#实例1) * [实例2](#实例2) * [实例下载文件](#实例下载文件) * [实例获取域名IP](#实例获取域名ip) * [WebResult介绍](#webresult介绍) # 示例 ## 创建请求 ``` csharp Http.Get("https://www.baidu.com") ``` ``` csharp Http.Post("https://www.baidu.com") ``` ``` csharp Http.Put("https://www.baidu.com") ``` ``` csharp Http.Delete("https://www.baidu.com") ``` ## 添加参数 >GET请求参数会自动注入到地址 ``` csharp data(new { test1 = "测试1", test2 = "测试2" }) data(new { wd = new string[] { "GitHub - Haku-Men HttpLib", "POST数组参数" } }) query(new { test = "POST下继续传递URL参数" }) query(new Val("test", "POST下继续传递URL参数1")) ``` >支持Class模型 `POST Json 需要自己编程` ``` csharp data(new MyModel{ id = "id参数", file=new Files(@"文件地址") }) ``` ``` csharp data(new Val("test1", "测试1"), new Val("test2", "测试2")) ``` ``` csharp data(new List { new Val("test1","测试1"), new Val("test2","测试2") }) ``` ``` csharp string json = "{\"JSON\":\"json data\"}"; datastr(json,"application/json") ``` ``` csharp data(new Files("文件地址")) file(@"文件地址") ``` ## 添加请求头 ``` csharp header(new { Accept = "*/*", Token = "test" }) ``` ``` csharp header(new Val("Accept","*/*"), new Val("User-Agent","Chrome")) ``` ## 启用重定向 >默认禁止 ``` csharp redirect(true) ``` ## 设置超时时长 >`毫秒`(默认100秒) ``` csharp timeout(3000) ``` ## 设置编码 >默认`utf-8` ``` csharp encoding("utf-8") ``` ## 设置缓存 >先配置`Config.CacheFolder`缓存文件夹 ``` csharp cache("缓存id") ``` >或者设定有效期 1分钟 ``` csharp cache("缓存id",1) ``` ## 请求之前处理 ``` csharp before((HttpCore r) => { return true; //继续请求 }) ``` ## 请求之后处理 ``` csharp after((HttpCore r, HttpResponseMessage msg) => { return true; //继续下载数据 }) ``` ## 注入回调获取进度 >字节大小 ### 上传 ``` csharp requestProgres(prog => { Console.Write("{0}% 上传", prog); }) ``` ### 下载 ``` csharp responseProgres((bytesSent, totalBytes) => { if (totalBytes.HasValue) { double prog = (bytesSent * 1.0) / (totalBytes.Value * 1.0); Console.Write("{0}% 下载", Math.Round(prog * 100.0, 1).ToString("N1")); } }) ``` # 请求 >方法全异步 ``` csharp requestNone();//仅请求 request();//返回字符串 requestData();//返回字节 download("保存目录", "保存文件名称(为空自动获取)");//下载文件 ``` # 实例1 >异步 ``` csharp Config.UserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 Edg/108.0.0.0"; Http.Get("https://www.baidu.com/s") .data(new { wd = "GitHub - Haku-Men HttpLib" }) .redirect(true) .requestProgres(prog => { Console.Write("{0}% 上传", prog); }) .responseProgres((bytesSent, totalBytes) => { if (totalBytes.HasValue) { double prog = (bytesSent * 1.0) / (totalBytes.Value * 1.0); Console.Write("{0}% 下载", Math.Round(prog * 100.0, 1).ToString("N1")); } }) .request().ContinueWith((data) => { Console.WriteLine(data.Result.Data); }); ``` # 实例2 >同步 ``` csharp var html = Http.Get("https://www.baidu.com/s") .data(new { wd = "GitHub - Haku-Men HttpLib" }) .redirect(true) .requestProgres(prog => { Console.Write("{0}% 上传", prog); }) .responseProgres((bytesSent, totalBytes) => { if (totalBytes.HasValue) { double prog = (bytesSent * 1.0) / (totalBytes.Value * 1.0); Console.Write("{0}% 下载", Math.Round(prog * 100.0, 1).ToString("N1")); } }) .request().Result; Console.WriteLine(html.Data); ``` # 实例下载文件 ``` csharp Http.Get("https://dldir1.qq.com/qqfile/qq/PCQQ9.7.3/QQ9.7.3.28946.exe") .redirect(true) .responseProgres((bytesSent, totalBytes) => { Console.SetCursorPosition(0, 0); if (totalBytes.HasValue) { double prog = (bytesSent * 1.0) / (totalBytes.Value * 1.0); Console.Write("{0}% 下载 {1}/{2} ", Math.Round(prog * 100.0, 1).ToString("N1"), CountSize(bytesSent), CountSize(totalBytes.Value)); } else { Console.Write("{0} 下载 ", CountSize(bytesSent)); } }).download(@"C:\Users\admin\Desktop").ContinueWith(savapath => { if (savapath.Result != null) { Console.WriteLine("下载成功保存至:" + savapath.Result.Data); } else { Console.WriteLine("下载失败"); } }).Wait(); ``` # 实例获取域名IP ``` csharp Http.Get("https://www.baidu.com").IP ``` # WebResult介绍 |代码|解释|说明| |:------------|:---------------:|:------------| |OK|是否成功响应|`true` 正常响应| |StatusCode|状态代码|`200` 为正常 常见的有`404`未找到、`302`重定向、`502`网址报错| |Type|服务指示类型|`Content-Type`| |Header|响应头|| |HeaderContent|内容响应头|| |Exception|错误异常|| |Data|响应内容||