fiberphp / http-client
📡 FiberPHP HTTP 客户端 —— 支持熔断器、自动重试、链路追踪集成,协程异步,开箱即用。
dev-master
2026-09-09 05:54 UTC
Requires
- php: >=8.3
- ext-json: *
- fiberphp/container: dev-master
- psr/log: ^3.0
- workerman/http-client: ^3.1
Requires (Dev)
- phpunit/phpunit: ^11.0
Suggests
- fiberphp/config: 从 config/http_client.php 读取用户配置
- fiberphp/log: 请求/响应日志(未安装时日志降级为 no-op)
- fiberphp/tracing: 链路追踪(B3 传播头注入 + Client Span)
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-09-09 05:54:41 UTC
README
协程友好的 HTTP 客户端,封装 workerman/http-client。单例复用连接池,内置自动重试(指数退避)、熔断器、SSRF
防护与请求/响应日志脱敏,协程模式下同步写法、非阻塞执行。
环境要求
- PHP >= 8.3
ext-jsonworkerman/http-client^3.1fiberphp/containerdev-master
安装
composer require fiberphp/http-client
快速开始
use FiberPHP\HttpClient\Http;
use FiberPHP\Container\Container;
// 从容器获取单例
$http = Container::getInstance()->get(Http::class);
// GET
$response = $http->get('https://api.example.com/users', ['Accept' => 'application/json']);
$response->getStatusCode(); // 200
$body = $response->getBody()->__toString();
// POST(数组自动 JSON 序列化)
$response = $http->post('https://api.example.com/users', ['name' => 'tom'], [
'Authorization' => 'Bearer token',
]);
// 其他动词
$http->put($url, $data);
$http->patch($url, $data);
$http->delete($url);
$http->head($url);
原始请求
request() 暴露完整选项,可控制 method / data / headers / proxy:
$response = $http->request($url, [
'method' => 'POST',
'data' => $payload,
'headers' => ['Content-Type' => 'application/json'],
'proxy' => 'tcp://127.0.0.1:7890',
]);
配置说明
配置默认值内置于 Http,框架项目可通过 config/http_client.php 覆盖(与默认值递归合并):
return [
// 连接池
'max_conn_per_addr' => 128,
'keepalive_timeout' => 15,
'connect_timeout' => 30,
'timeout' => 30,
// 自动重试(指数退避)
'retry' => [
'max_attempts' => 3,
'delay_ms' => 200,
'multiplier' => 2.0,
'max_delay_ms' => 5000,
],
// 熔断器(按 host 滑动窗口统计失败率)
'circuit_breaker' => [
'enable' => true,
'failure_threshold' => 0.5,
'window_size' => 10,
'open_duration' => 30,
'half_open_success_threshold' => 3,
],
// SSRF 防护(接入用户可控 URL 时应显式开启)
'ssrf' => [
'enable' => false,
'allowed_schemes' => ['http', 'https'],
'block_private' => true,
'allow_hosts' => [],
'validator' => null,
'redirect_max' => 5,
],
];
特性
| 能力 | 说明 |
|---|---|
| 连接池复用 | 单例 Client,max_conn_per_addr 同地址复用连接 |
| 自动重试 | 幂等方法对 5xx/429/连接异常指数退避重试;非幂等方法对 5xx 不重试 |
| 熔断器 | 按 host 滑动窗口统计失败率,超阈值开路 → 半开探测 → 连续成功关闭 |
| SSRF 防护 | scheme 白名单、私网/保留地址拦截、DNS 解析防 rebinding、重定向逐跳校验、跨域剥离敏感头 |
| 日志脱敏 | authorization/cookie/token 等 14 个请求头、15 个 JSON 字段递归脱敏,body 截断 |
| 链路追踪 | 安装 fiberphp/tracing 后自动注入 B3 传播头并记录 Client Span |
| 协程 sleep | 重试退避优先 Workerman\Timer::sleep,无 Timer 退化为 usleep |
依赖说明
| 依赖 | 说明 |
|---|---|
| PHP >= 8.3 | 运行环境要求 |
ext-json | JSON 编解码 |
workerman/http-client | 底层 HTTP 客户端 |
fiberphp/container | 容器解析单例、ConfigRepository、LoggerInterface |
fiberphp/config | (suggest)从 config/http_client.php 读取用户配置 |
fiberphp/log | (suggest)请求/响应日志,未安装时降级为 NullLogger |
fiberphp/tracing | (suggest)链路追踪,B3 传播头注入 + Client Span |
目录结构
src/
├── Exception/
│ └── HttpClientException.php # HTTP 客户端异常(SSRF 拦截 / 熔断开启)
└── Http.php # HTTP 客户端(连接池 / 重试 / 熔断 / SSRF / 脱敏 / 追踪)
命名空间为 FiberPHP\HttpClient\(PSR-4,对应 src/ 目录)。
License
MIT License (c) 2026 庞斌,详见 LICENSE。