# 自定义Http送信器
当你不想使用框架内默认提供的httpClient服务而是想要自己实现一个的话,核心中提供了一个简易的自定义送信器接口:`HttpClientAble`。
`HttpClientAble`接口默认存在一个实现,也就是刚刚提到的框架内默认提供的`DefaultHttpClientTemplate`。当不存在用户自定义的送信器的时候,便会默认使用此送信器。
## **自定义并注册**
当你想要自定义一个送信器并让框架内部默认使用此送信器的话,你需要做两件事:
- **1. 实现`HttpClientAble`接口**
- **2.1. 在此类上标注`@HttpTemplate`注解来注册**
- **2.2. 使用`HttpClientHelper`类的静态方法`registerClient(...)`来注册**
<br>
### **1. 实现接口**
接口定义的抽象方法为:
```java
/**
* 使用get的方式进行网络请求
* @param url 送信网络路径
* @param params 参数列表,默认为空map,可以为null
* @param cookies 所携带的cookie列表,默认为空map,可以为null
* @param header 头信息,默认为空map,可以为null
* @return 网页的返回值字符串
*/
String get(String url, Map<String, String> params, Map<String, String> cookies, Map<String, String> header);
/**
* 使用post的方式进行网络请求
* 一般header中会提供一些json或者from的参数
* @param url 送信网络路径
* @param params 参数列表,默认为空map,可以为null
* @param cookies 所携带的cookie列表,默认为空map,可以为null
* @param header 头信息,默认为空map,可以为null
* @return 网页的返回值字符串
*/
String post(String url, String params, Map<String, String> cookies, Map<String, String> header);
```
即一个GET请求一个POST请求,并提供了若干默认方法的重载。
此类应当是可以支持依赖注入的。
### **2.1 标注注解来注册**
你可以在实现后,从类上标注一个`@HttpTemplate`注解来将其注册进`HttpClientHelper`中。此注解有两个参数:
```java
/**
* 注册到HttpClientHelper的时候使用的注册名称
*/
String value();
/**
* 是否将其作为默认使用的http模板,默认为false
*/
boolean beDefault() default false;
```
其中,"默认的模板"指的就是框架内所默认使用的模板。当然,尽管默认值为`false`,但是假如在那之前没有其他任何http送信器被注册的话,第一个注册的http送信器依旧会被作为默认的。
### **2.2 HttpClientHelper方法注册**
使用注解来注册本质上也是使用的`HttpClientHelper`类的方法`registerClient(...)`来注册的。此方法有两个重载:
```java
/**
* 注册一个http模板
* @param name http模板名称
* @param clientAble 模板实例
*/
public static void registerClient(String name, HttpClientAble clientAble)
/**
* 注册一个http模板
* @param name http模板名称
* @param clientAbleSupplier 模板实例获取函数
*/
public static synchronized void registerClient(String name, Supplier<HttpClientAble> clientAbleSupplier)
```
即一个使用实例对象来注册,一个使用获取函数来注册。
当`HttpClientHelper`中尚未注册任何送信器的时候,第一个注册的http送信器会被作为默认送信器。当然,你也可以在注册后通过方法`setDefaultName(String defaultName)`来指定一个http送信器作为送信器。
### **HttpClientHelper**
当你注册完成后,你可以使用`HttpClientHelper`的`getHttp(String name)` 或者 `getDefaultHttp()`方法来获取一个指定的或者默认的http送信器。
`HttpClientHelper`其自身也实现了接口`HttpClientAble`,你也可以直接通过`new HttpClientHelper()`来使用。其使用的真正http送信器为当前的默认送信器。
- 前言
- 简单介绍
- 我该如何阅读文档
- 视频教程
- 安装与使用
- 开源协议
- 免责&捐助
- 注意事项
- 版本命名规则简介
- 主要功能版本历史
- 功能指引
- 通用API与功能
- 国际化语言
- 异常
- 消息监听
- @Listen
- @OnListen模板
- @Filter
- 消息参数截取
- @Spare
- @Constr
- @Ignore
- @ListenBreak
- @ListenBreakPlugin
- @ListenBody
- 监听响应
- 成功判定与返回值
- 监听上下文
- 动态参数
- 监听消息API
- 异步监听 @Async
- 限流监听 @Limit
- 自定义Http送信器
- 枚举与类型
- 送信器
- SENDER
- SETTER
- GETTER
- 返回值
- 其他位置
- 日志与日志拦截
- 异常处理
- 依赖注入
- 自定义依赖获取
- 批量依赖载入
- 注意事项
- 常量
- 定时任务
- 自定义过滤
- 拦截器
- 拦截器总定义
- 上下文对象总定义
- 监听消息拦截
- 送信器拦截
- 监听函数拦截
- CAT码
- CQ码
- CQCode
- CQ码工具类
- CQ扩展工具类
- AppendList拼接链
- 高级内容
- 阻断机制
- 截断机制
- 自定义枚举类型
- 枚举工厂
- byName注解
- 自定义注解
- 配置
- 文件配置
- 注解配置
- 参数配置
- 多配置
- 多账号
- 自定义账号管理器
- 小心!
- 核心版本与组件如何升级核心
- 核心版本迭代指南
- 核心
- 更新日志
- jar包与依赖
- 监听消息类结构图
- 快速启动
- 模组与扩展
- 模组开发
- 现有模组
- 通用模组-延时任务
- 通用模组-CQ码工具
- 转义器
- CQ码操作工具类
- CQ码模板-CodeTemplate
- CQ码载体-KQCode
- CQ码构建器
- MQ码工具类
- 通用模组-redis-bot管理器
- 通用模组-Debugger
- Debugger-common模块
- Debugger-server模块
- Debugger-client模块
- 通用模组-钉钉机器人
- 组件-Mirai(JVM)
- 快速开始(1.13+)
- springboot-starter
- 注意事项
- 配置
- 额外的内容
- 快速回复
- 额外监听
- CQ码解析
- 组件-酷Q(QQ)-CQ HTTP API(基本失效)
- 快速开始(推荐)
- 快速开始(1.7.x以下,不推荐)
- 快速开始(Springboot启动器)
- 启动器、启动接口与配置类
- 配置
- 文件配置
- 注意事项
- 更新日志
- 额外的内容
- 自定义额外监听
- CQ送信器
- 元事件
- 监听消息类结构图
- 组件-酷Q(QQ)-JCQ(失效)
- 快速开始
- 更新日志
- 额外的内容
- JCQ日志
- 配置
- 注意事项
- 监听消息类结构图
- 组件-酷Q(QQ)-HTTP TO CQ(失效)
- 快速开始(核心1.7.x及以下)
- 启动器、启动接口与配置类
- 配置
- 文件配置
- 注意事项
- 更新日志
- 监听消息类结构图
- 组件-酷Q(QQ)-LEMOC (失效)
- 快速开始(核心1.7.x及以下)
- 配置
- 注意事项
- 更新日志
- 监听消息类结构图
- Springboot快速启动器
- 常见问题汇总
- BUG反馈
- 更新计划总览