便捷的HttpClient库 支持GET/POST/PUT/Delete,上传与下载的进度监控,既可以上传文件等二进制数据,也可以上传表单键值对 =========================== 使用HttpClient 新增HttpDown多线程断点续传下载
$ dotnet add package Tom.HttpLib.Client如果你喜欢 HttpLib 项目,请为本项点亮一颗星 ⭐!
既可以上传文件等二进制数据,也可以上传表单键值对
上传与下载的进度监控
类似图片加载场景,同一个id的图片通过磁盘存储减少网络开支
默认关闭 使用
HttpClientFactory池,可以最大程度上节省系统重复请求开支
Config.UsePool = true;
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(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 需要自己编程
data(new MyModel{ id = "id参数", file=new Files(@"文件地址") })data(new Val("test1", "测试1"), new Val("test2", "测试2"))data(new List<Val> {
new Val("test1","测试1"),
new Val("test2","测试2")
})string json = "{\"JSON\":\"json data\"}";
datastr(json,"application/json")data(new Files("文件地址"))
file(@"文件地址")header(new { Accept = "*/*", Token = "test" })header(new Val("Accept","*/*"), new Val("User-Agent","Chrome"))默认禁止
redirect(true)
毫秒(默认100秒)
timeout(3000)默认
utf-8
encoding("utf-8")先配置
Config.CacheFolder缓存文件夹
cache("缓存id")或者设定有效期 1分钟
cache("缓存id",1)before((HttpCore r) =>
{
return true; //继续请求
})after((HttpCore r, HttpResponseMessage msg) =>
{
return 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"));
}
})方法全异步
requestNone();//仅请求
request();//返回字符串
requestData();//返回字节
download("保存目录", "保存文件名称(为空自动获取)");//下载文件异步
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);
});同步
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);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();Http.Get("https://www.baidu.com").IP| 代码 | 解释 | 说明 |
|---|---|---|
| OK | 是否成功响应 | true 正常响应 |
| StatusCode | 状态代码 | 200 为正常 常见的有404未找到、302重定向、502网址报错 |
| Type | 服务指示类型 | Content-Type |
| Header | 响应头 | |
| HeaderContent | 内容响应头 | |
| Exception | 错误异常 | |
| Data | 响应内容 |