首页 > 其他分享 >适用于 .NET 的现代化、流畅、可测试的HTTP客户端库

适用于 .NET 的现代化、流畅、可测试的HTTP客户端库

时间:2024-07-18 22:29:40浏览次数:10  
标签:HTTP await api Flurl https NET com 客户端

前言

今天大姚给大家分享一个.NET开源(MIT License)、免费、现代化、流畅、可测试、可移植的URL构建器和HTTP客户端库:Flurl。

项目介绍

Flurl是一个集现代性、流畅性、异步性、可测试性、可移植性于一身的URL构建器与HTTP客户端库。它提供了简洁的API,使得HTTP请求的发送与URL的构建变得极为简单与直观。无论是构建复杂的URL路径,还是设置查询参数、请求头或认证信息,Flurl都能以几乎零学习成本的方式实现。

项目源代码

项目使用

安装项目NuGet包

Flurl.Http 是一个构建在 Flurl 基础之上的 HTTP 客户端库。它提供了发送 HTTP 请求(GET、POST、PUT、DELETE 等)的简洁、流畅的 API:

Install-Package Flurl.Http

Flurl 是 Flurl.Http 的基础库,它主要关注于 URL 的构建和解析:

Install-Package Flurl

URL 构建器

using Flurl;

var url = "https://some-api.com"
    .AppendPathSegment("endpoint")
    .SetQueryParams(new {
        api_key = _config.GetValue<string>("MyApiKey"),
        max_results = 20,
        q = "I'll get encoded!"
    })
    .SetFragment("after-hash");

// result:
// https://some-api.com/endpoint?api_key=xxx&max_results=20&q=I%27ll%20get%20encoded%21#after-hash
"https://some-api.com".SetQueryParam("x", new[] { 1, 2, 3 }); // https://some-api.com?x=1&x=2&x=3
"https://some-api.com"
    .AppendQueryParam("x", 1);
    .AppendQueryParam("x", 2);
    .AppendQueryParams("x", new[] { 3, 4 }); // https://some-api.com?x=1&x=2&x=3&x=4

模拟和记录HTTP请求

using Flurl;
using Flurl.Http;

var resultData = await "https://some-api.com"
    .AppendPathSegment("endpoint") 
    .GetStringAsync();
    
var result = await "http://api.foo.com".PostJsonAsync(requestObj).ReceiveJson<T>();
var resultStr = await "http://api.foo.com/1".PatchJsonAsync(requestObj).ReceiveString();
var resultStr2 = await "http://api.foo.com/2".PutStringAsync("hello").ReceiveString();
var resp = await "http://api.foo.com".OptionsAsync();
await "http://api.foo.com".HeadAsync();

文件上传相关:

var resp = await "http://api.com".PostMultipartAsync(mp => mp
    .AddString("name", "hello!")                // individual string
    .AddStringParts(new {a = 1, b = 2})         // multiple strings
    .AddFile("file1", path1)                    // local file path
    .AddFile("file2", stream, "foo.txt")        // file stream
    .AddJson("json", new { foo = "x" })         // json
    .AddUrlEncoded("urlEnc", new { bar = "y" }) // URL-encoded                      
    .Add(content));                             // any HttpContent

下载文件:

// filename is optional here; it will default to the remote file name
var path = await "http://files.foo.com/image.jpg"
    .DownloadFileAsync("c:\\downloads", filename);

处理超时错误:

try {
    var result = await url.GetStringAsync();
}
catch (FlurlHttpTimeoutException) {
    // handle timeouts
}
catch (FlurlHttpException) {
    // handle error responses
}

项目源码地址

更多项目实用功能和特性欢迎前往项目开源地址查看

标签:HTTP,await,api,Flurl,https,NET,com,客户端
From: https://www.cnblogs.com/Can-daydayup/p/18310536

相关文章

  • Client访问HTTP服务器实验报告
    实验要求:通过配置实现client使用域名访问HTTP服务器例图:1.配置路由基本信息<Huawei>system-view 进入系统视图[Huawei]sysnameR1    修改设备名称[R1]interfaceg0/0/0      进入千兆以太网接口[R1-GigabitEthernet0/0/0]ipaddress192.168.1.10024 ......
  • C#实现HttpUtility.UrlEncode输出大写字母
     在c#中,HttpUtility.UrlEncode("www+mzwu+com")编码结果为www%2bmzwu%2bcom,在和Java开发的平台做对接的时候,对方用用url编码后再对其进行MD5加密,url编码之后的字符串为大(www%2Bmzwu%2Bcom)写这样加密出来的字符串就.net平台的不匹配,以下供上方法就是解决HttpUtility.UrlEncode......
  • 浅谈:HTTP 和 HTTPS 通信原理
    1.HTTP基本概念1.1HTTP是什么? HTTP (超文本传输协议)协议被用于在Web浏览器和网站服务器之间传递信息, HTTP 协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此, HTTP 协议不适合传......
  • NET9 Asp.net Core将整合OpenAPI的文档生成功能而无需三方库
    OpenAPI规范是用于描述HTTPAPI的标准。该标准允许开发人员定义API的形状,这些API可以插入到客户端生成器、服务器生成器、测试工具、文档等中。尽管该标准具有普遍性和普遍性,但ASP.NETCore在框架内默认不提供对OpenAPI的支持。当前ASP.NETCore不提供对OpenAPI......
  • `TypeError: unsupported operand type(s) for +: ‘NoneType‘ and ‘float‘`
    @[TOC](TypeError:unsupportedoperandtype(s)for+:'NoneType'and'float'......
  • .NET|--杂类|--json文件未释放, 就开始反序列化, 报错Newtonsoft.Json Unexpected cha
    前言一个看起来很莫名其妙的错误,json文件我打开看了下,格式也都正确,但是在vs中调试的时候,监视--查看--JSON可视化工具查看json字符串的话,会提示"字符串未设置为JSON格式","监视--查看--文本可视化工具",发现json格式确实看不出来任何问题.报错#报......
  • .NET|--杂类|--将Shp文件转为GeoJson-通过GDAL
    前言真实需求是将Shp转为pbf文件,不过我现在已经实现了,将GeoJson格式数据转换为pbf文件,所以需要实现将Shp文件转换为GeoJson格式即可.1.下载GDAL的程序集下载地址→https://www.gisinternals.com/development.php下载完成,解压zip文件,可以看到这些dll文件(路......
  • 通过22端口实现IP的https证书
    当我们在访问网站时,一般需通过两种形式,一种是通过域名来访问,另一种则是通过IP地址来访问。如果它们要想升级为https协议,则离不开SSL证书和IP证书。SSL证书和IP证书成为了网络安全的重要组成部分,然而许多人不清楚它们之间的区别。但是要知道IPSSL证书的验证方式有且只能使用......
  • SSL证书实现无限多的域名https访问
    目录不同的网站类型适合不同的SSL证书:泛域名证书的安全等级:通配符SSL证书的好处申请并配置通配符证书的方法:如今随着网络技术的高速发展,网络安全问题也成为了重中之重的一个方面,要实现网络安全的全面推进,SSL证书则是其中不可替代的安全工具之一,实现网站的https加密访问......
  • 强烈推荐:18.3k star,推荐一款简单易用的HTTP请求流量录制回放工具:Goreplay
    在软件开发和测试过程中,我们经常需要对应用程序的网络请求进行录制和回放,以便进行性能分析、压力测试或者模拟复杂的网络环境。今天,我要向大家推荐一款简单易用的HTTP请求流量录制回放工具:Goreplay。1、简介Goreplay是一款用Go语言编写的HTTP请求流量录制回放工具。它可......