创建HttpClient
定义
TouchSocket.Http
TouchSocket.Http.WebSockets
dotnet add package TouchSocket.Http
一、说明
HttpClient
是Http系客户端类,他是基于单个TCP连接的Http客户端。与.NET框架中的HttpClient不同,TouchSocket的HttpClient具有明显的连接、断开连接等动作,且能够复用TCP连接来处理多个Http请求。
二、特点
- 简单易用。
- 基于单个TCP连接,支持连接复用。
- 支持Http/Https协议。
- 支持自定义证书验证。
- 内存池支持,高性能处理。
- 支持流式上传和下载。
- 支持SSE(Server-Sent Events)。
- 基于委托、插件驱动,支持AOP扩展。
三、产品应用场景
- HTTP API调用:RESTful API客户端实现。
- 文件上传下载:大文件流式传输。
- 实时通信:SSE推送消息接收。
- 微服务通信:服务间HTTP通信。
- 爬虫应用:网页数据抓取。
- HTTPS安全通信:SSL/TLS加密传输。
四、可配置项
HttpClient
继承自TcpClient
,所以支持所有TcpClient的所有配置项。
Http基本没有专用配置,但是下面依然会介绍一些在使用Http时的常用相关配置。
4.1 目标服务器地址
HttpClient
必须指定远程服务器地址,支持HTTP和HTTPS协议。支持类型:
- 使用HTTP协议,传入形如:
http://127.0.0.1:7219
的字符串即可。 - 使用HTTPS协议,传入形如:
https://127.0.0.1:7219
的字符串即可。 - 使用域名,必须包含协议类型,形如:
https://api.example.com
或者http://api.example.com:8080
4.2 SSL/TLS配置
当使用HTTPS协议时,HttpClient
支持SSL/TLS加密连接。可以通过SetClientSslOption
方法进行配置。
不过一般来说,如果服务器使用受信任的证书,可以直接使用https://
协议头连接服务器即可。
例如:
如果是自定义证书,则需要手动加载证书,详情见创建Ssl的TcpClient配置。
4.3 代理配置
HttpClient
支持HTTP代理,可以通过SetProxy
方法进行配置。
或者直接使用系统代理:
五、支持插件接口
支持ITcpPlugin所有接口,无特殊接口。
六、创建HttpClient
6.1 简单创建HttpClient
6.2 常规配置创建Http客户端
实际上直接使用ConnectAsync("https://localhost:7219")
的方式是合并了SetupAsync
与ConnectAsync
。所以当需要额外配置时,应当遵循所有配置都在TouchSocketConfig
的约定。这样代码也比较简单明了。
七、发送HTTP请求
因为HttpClient
是面向连接的,所以在发送请求时,请求URL只需要填写主机地址之后的部分(即路由部分)。
7.1 获取字符串响应
7.2 获取字节数组响应
7.3 获取流数据响应(下载文件)
7.4 自定义请求构建
7.4.1 构建基础自定义请求
7.4.2 构建自定义请求,持续读取大数据
7.5 Post发送JSON数据
7.6 流式上传数据(文件上传)
在构建自定义请求时,如果使用AsGet
、AsPost
等方法可以直接设置当前请求为Get
、Post
等。如果没有扩展方法可以使用时,可以使用AsMethod
来实现,例如:AsMethod("PUT")
、AsMethod("DELETE")
等。
八、断线重连
因为我们的HttpClient
是面向连接的,所以在网络较差时,可能会断线连接,此时你可以通过Tcp客户端的机制,获取断开信息。
例如:
除此之外,当连接断开时,我们希望客户端可以自动进行重连,即客户端在断开服务器后,主动发起的再次连接请求。
9.1 启用断线重连
断线重连,依靠的是客户端断开后,或者初始化后,Online
属性为false
时,会尝试连接。
所以,重连机制在Setup
完成后,即会生效。
断线重连,必须满足以下几个要求:
- 必须有显式的断开信息,也就是说,直接拔网线的话,不会立即生效,会等tcp保活到期后再生效。此处可以结合健康活性检验插件来绝对保活。
UseReconnection
插件,可以通过设置SetActionForCheck
,自己规定检查活性的方法。默认情况下,只会检验Online
属性,所以无法检验出断网等情况。如果自己控制,则可以发送心跳包,以保证在线状态。
9.2 暂停重连
适用于重连的客户端,都提供了SetPauseReconnection
方法,可以暂停或者恢复重连。