跳到主要内容
版本:4.0-beta

创建HttpClient

定义

定义

命名空间:
TouchSocket.HttpTouchSocket.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协议。支持类型:

  1. 使用HTTP协议,传入形如:http://127.0.0.1:7219的字符串即可。
  2. 使用HTTPS协议,传入形如:https://127.0.0.1:7219的字符串即可。
  3. 使用域名,必须包含协议类型,形如:https://api.example.com或者http://api.example.com:8080
🔄 正在加载代码...

4.2 SSL/TLS配置

当使用HTTPS协议时,HttpClient支持SSL/TLS加密连接。可以通过SetClientSslOption方法进行配置。

不过一般来说,如果服务器使用受信任的证书,可以直接使用https://协议头连接服务器即可。

例如:

🔄 正在加载代码...

如果是自定义证书,则需要手动加载证书,详情见创建Ssl的TcpClient配置

五、支持插件接口

支持ITcpPlugin所有接口,无特殊接口。

六、创建HttpClient

6.1 简单创建HttpClient

🔄 正在加载代码...

6.2 常规配置创建Http客户端

🔄 正在加载代码...
备注

实际上直接使用ConnectAsync("https://localhost:7219")的方式是合并了SetupAsyncConnectAsync。所以当需要额外配置时,应当遵循所有配置都在TouchSocketConfig的约定。这样代码也比较简单明了。

七、发送HTTP请求

因为HttpClient是面向连接的,所以在发送请求时,请求URL只需要填写主机地址之后的部分(即路由部分)。

7.1 获取字符串响应

🔄 正在加载代码...

7.2 获取字节数组响应

🔄 正在加载代码...

7.3 获取流数据响应(下载文件)

🔄 正在加载代码...

7.4 自定义请求构建

7.4.1 构建基础自定义请求

🔄 正在加载代码...

7.4.2 构建自定义请求,持续读取大数据

🔄 正在加载代码...

7.5 Post发送JSON数据

🔄 正在加载代码...

7.6 流式上传数据(文件上传)

🔄 正在加载代码...
提示

在构建自定义请求时,如果使用AsGetAsPost等方法可以直接设置当前请求为GetPost等。如果没有扩展方法可以使用时,可以使用AsMethod来实现,例如:AsMethod("PUT")AsMethod("DELETE")等。

八、断线重连

因为我们的HttpClient是面向连接的,所以在网络较差时,可能会断线连接,此时你可以通过Tcp客户端的机制,获取断开信息。

例如:

🔄 正在加载代码...

除此之外,当连接断开时,我们希望客户端可以自动进行重连,即客户端在断开服务器后,主动发起的再次连接请求。

9.1 启用断线重连

断线重连,依靠的是客户端断开后,或者初始化后,Online属性为false时,会尝试连接。

所以,重连机制在Setup完成后,即会生效。

🔄 正在加载代码...
注意

断线重连,必须满足以下几个要求:

  1. 必须有显式的断开信息,也就是说,直接拔网线的话,不会立即生效,会等tcp保活到期后再生效。此处可以结合健康活性检验插件来绝对保活。
提示

UseReconnection插件,可以通过设置SetActionForCheck,自己规定检查活性的方法。默认情况下,只会检验Online属性,所以无法检验出断网等情况。如果自己控制,则可以发送心跳包,以保证在线状态。

9.2 暂停重连

适用于重连的客户端,都提供了SetPauseReconnection方法,可以暂停或者恢复重连。

🔄 正在加载代码...

九、示例Demo