Skip to content

Latest commit

History

28 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

HttpLib 便捷的Http库 | 多线程下载库

如果你喜欢 HttpLib 项目,请为本项点亮一颗星 ⭐!

NuGetDownload

🖥支持环境

  • .NET 6.0及以上。
  • .NET Core3.1及以上。
  • .NET Standard2.0及以上。

🌴支持

multipart/form-data

既可以上传文件等二进制数据,也可以上传表单键值对

上传与下载进度回调

上传与下载的进度监控

支持缓存

类似图片加载场景,同一个id的图片通过磁盘存储减少网络开支

多线程下载

支持多线程分段下载,提高下载速度

下载管理

支持暂停、恢复下载,下载速度和时间估算


目录

示例

创建请求

Http.Get("https://www.baidu.com")
Http.Post("https://www.baidu.com")
Http.Put("https://www.baidu.com")
Http.Delete("https://www.baidu.com")

添加参数

GET请求参数会自动注入到地址

data("wd","随便搜一下")
data(new{test1="测试1",test2="测试2"})
data(new{params_="关键字参数"})
data(new{wd=newstring[]{"GitHub - Haku-Men HttpLib","POST数组参数"}})

URL参数(除了GET请求)

query("键","值对")
query(new{test="POST下继续传递URL参数"})
data(newVal("test1","测试1"),newVal("test2","测试2"))
data(newList<Val>{newVal("test1","测试1"),newVal("test2","测试2")})

上传字符串 默认 text/plain

stringjson="{\"JSON\":\"json data\"}";datastr(json,"application/json")

上传文件

data(newFiles("文件地址"))
file(@"文件地址")

添加请求头

header("Authorization","abc")
header(new{accept="*/*",userAgent="Chrome"})
header(newVal("accept","*/*"),newVal("user-agent","Chrome"))

设置代理

proxy("127.0.0.1",1000)

启用重定向

默认禁止

redirect()

设置超时时长

毫秒(默认不超时)

timeout(3000)

设置编码

默认utf-8

encoding('utf-8')

设置缓存

先配置Config.CacheFolder缓存文件夹

cache("缓存id")

或者设定有效期 1分钟

cache("缓存id",1)

请求之前处理

before((HttpWebResponseresponse,ResultResponseresult)=>{returntrue;//继续请求})

注入回调获取进度

字节大小

上传

uploadProgress(e =>{Console.Write("{0}% 上传",Math.Round(e.Prog*100.0,1).ToString("N1"));})

下载

downloadProgress(e =>{if(e.GetProg(outvarprog)){Console.Write("{0}% 下载",Math.Round(prog*100.0,1).ToString("N1"));}})

请求

异步错误

fail((ResultResponseresult)=>{})

同步获取

requestNone();//不下载流request();//返回字符串requestData();//返回字节download("保存目录","保存文件名称(为空自动获取)");//下载文件

实例

string?result=Http.Get("https://www.baidu.com/s").data(new{wd="GitHub - Haku-Men HttpLib",params_="关键字参数"}).redirect().request();Console.Write(result);

实例下载文件

varsavapath=Http.Get("https://dldir1.qq.com/qqfile/qq/QQNT/Windows/QQ_9.9.9_240422_x64_01.exe").redirect().downloadProgress(e =>{Console.SetCursorPosition(0,0);if(e.GetProg(outvarprog)){Console.Write("{0}% 下载 {1}/{2} ",Math.Round(prog*100.0,1).ToString("N1"),CountSize(e.Value),CountSize(e.MaxValue));}else{Console.Write("{0} 下载 ",CountSize(e.Value));}}).download(Environment.GetFolderPath(Environment.SpecialFolder.Desktop),"qq.exe");if(savapath!=null)Console.WriteLine("下载成功保存至:"+savapath);elseConsole.WriteLine("下载失败");

实例流式传输

Http.Get("https://test.chatgpt.com/local_doc_chat").request(msg =>{if(msg==null)return;if(msg.StartsWith("data: "))msg=msg.Substring(5).Trim();System.Diagnostics.Debug.WriteLine(msg);});

实例获取域名IP

Http.Get("https://www.baidu.com").IP

实例全局错误捕获

Config.fail+=(HttpCorecore,ResultResponseresult)=>{if(result.Exception==null)return;Console.Write(result.Exception.GetType());Console.Write(result.Exception.Message);};

多线程下载

多线程下载基本用法

简单下载

vardownloader=Http.Get("https://dldir1.qq.com/qqfile/qq/QQNT/Windows/QQ_9.9.9_240422_x64_01.exe").downLoad(Environment.GetFolderPath(Environment.SpecialFolder.Desktop));string?savePath=awaitdownloader.Go();if(savePath!=null)Console.WriteLine("下载成功保存至: "+savePath);elseConsole.WriteLine("下载失败");

自定义线程数

vardownloader=Http.Get("https://example.com/large-file.zip").downLoad(Environment.GetFolderPath(Environment.SpecialFolder.Desktop));// 使用 8 线程下载string?savePath=awaitdownloader.Go(8);

自定义文件名

vardownloader=Http.Get("https://example.com/file.zip").downLoad(Environment.GetFolderPath(Environment.SpecialFolder.Desktop));// 自定义保存文件名string?savePath=awaitdownloader.Go("custom-name.zip");

多线程下载高级选项

完整控制

vardownloader=Http.Get("https://example.com/large-file.zip").downLoad(Environment.GetFolderPath(Environment.SpecialFolder.Desktop)).SetRetryCount(3)// 设置重试次数.SetCacheSize(8192);// 设置缓存大小string?savePath=awaitdownloader.Go(4,"my-file.zip");

下载状态与监控

监控下载进度

vardownloader=Http.Get("https://dldir1.qq.com/qqfile/qq/QQNT/Windows/QQ_9.9.9_240422_x64_01.exe").downLoad(Environment.GetFolderPath(Environment.SpecialFolder.Desktop));// 监控下载进度downloader.ValueChange(progress =>{Console.SetCursorPosition(0,0);Console.WriteLine($"下载进度: {downloader.Prog*100:F1}%"+$" 速度: {downloader.Speed}/s"+$" 剩余时间: {downloader.Time}");});// 监控下载状态变化downloader.StateChange((t,err)=>{Console.WriteLine($"下载状态: {t}");});string?savePath=awaitdownloader.Go();

暂停与恢复下载

vardownloader=Http.Get("https://example.com/large-file.zip").downLoad(Environment.GetFolderPath(Environment.SpecialFolder.Desktop));// 开始下载vardownloadTask=downloader.Go();// 暂停下载downloader.Suspend();// 恢复下载downloader.Resume();// 等待下载完成string?savePath=awaitdownloadTask;

ResultResponse介绍

代码类型解释说明
StatusCodeint状态代码200 为正常 常见的有404未找到、302重定向、502网址报错
IsSuccessStatusCodebool响应是否成功range 200-299
ServerHeaderstring?服务头HTTP 200 OK BWS/1.1 Ver:1.1
UriUri最终的地址
Typestring?服务指示类型Content-Type
HeaderDictionary<string, string>响应头
CookieDictionary<string, string>Cookie
OriginalSizelong流原始大小动态压缩
Sizelong流大小
ExceptionException?异常信息

About

便捷的Http库

Topics

Resources

Stars

22 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages