HttpLib
HttpLib copied to clipboard
便捷的Http库
HttpLib 便捷的Http库 | 多线程下载库
如果你喜欢 HttpLib 项目,请为本项点亮一颗星 ⭐!
🖥支持环境
- .NET 6.0及以上。
- .NET Core3.1及以上。
- .NET Standard2.0及以上。
🌴支持
multipart/form-data
既可以上传文件等二进制数据,也可以上传表单键值对
上传与下载进度回调
上传与下载的进度监控
支持缓存
类似图片加载场景,同一个id的图片通过磁盘存储减少网络开支
目录
- 示例
- 创建请求
- 添加参数
- 添加请求头
- 设置代理
- 启用重定向
- 设置超时时长
- 设置编码
- 设置缓存
- 请求之前处理
- 注入回调获取进度
- 上传
- 下载
- 请求
- 异步错误
- 异步请求
- 同步获取
- 实例
- 实例下载文件
- 实例流式传输
- 实例获取域名IP
- 实例全局错误捕获
- ResultResponse介绍
示例
创建请求
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 = new string[] { "GitHub - Haku-Men HttpLib", "POST数组参数" } })
URL参数(除了GET请求)
query("键", "值对")
query(new { test = "POST下继续传递URL参数" })
data(new Val("test1", "测试1"), new Val("test2", "测试2"))
data(new List<Val> {
new Val("test1","测试1"),
new Val("test2","测试2")
})
上传字符串 默认
text/plain
string json = "{\"JSON\":\"json data\"}";
datastr(json, "application/json")
上传文件
data(new Files("文件地址"))
file(@"文件地址")
添加请求头
header("Authorization", "abc")
header(new { accept = "*/*", userAgent = "Chrome" })
header(new Val("accept","*/*"), new Val("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((HttpWebResponse response, ResultResponse result) =>
{
return true; //继续请求
})
注入回调获取进度
字节大小
上传
requestProgres((bytesSent, totalBytes) => {
double prog = (bytesSent * 1.0) / (totalBytes * 1.0);
Console.Write("{0}% 上传", Math.Round(prog * 100.0, 1).ToString("N1"));
})
下载
responseProgres((bytesSent, totalBytes) => {
if (totalBytes > 0)
{
double prog = (bytesSent * 1.0) / (totalBytes * 1.0);
Console.Write("{0}% 下载", Math.Round(prog * 100.0, 1).ToString("N1"));
}
})
请求
异步错误
fail((ResultResponse result) => {
})
同步获取
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);
实例下载文件
var savapath = Http.Get("https://dldir1.qq.com/qqfile/qq/QQNT/Windows/QQ_9.9.9_240422_x64_01.exe")
.redirect()
.responseProgres((bytesSent, totalBytes) =>
{
Console.SetCursorPosition(0, 0);
if (totalBytes > 0)
{
double prog = (bytesSent * 1.0) / (totalBytes * 1.0);
Console.Write("{0}% 下载 {1}/{2} ", Math.Round(prog * 100.0, 1).ToString("N1"), CountSize(bytesSent), CountSize(totalBytes));
}
else
{
Console.Write("{0} 下载 ", CountSize(bytesSent));
}
}).download(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "qq.exe");
if (savapath != null) Console.WriteLine("下载成功保存至:" + savapath);
else Console.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 += (HttpCore core, ResultResponse result)=>
{
if (result.Exception == null) return;
Console.Write(err.GetType());
Console.Write(err.Message);
};
ResultResponse介绍
| 代码 | 类型 | 解释 | 说明 |
|---|---|---|---|
| StatusCode | int | 状态代码 | 200 为正常 常见的有404未找到、302重定向、502网址报错 |
| IsSuccessStatusCode | bool | 响应是否成功 | range 200-299 |
| ServerHeader | string? |
服务头 | HTTP 200 OK BWS/1.1 Ver:1.1 |
| Uri | Uri | 最终的地址 | |
| Type | string? |
服务指示类型 | Content-Type |
| Header | Dictionary<string, string> | 响应头 | |
| Cookie | Dictionary<string, string> | Cookie | |
| OriginalSize | long | 流原始大小 | 动态压缩 |
| Size | long | 流大小 | |
| Exception | Exception? |
异常信息 |