Search by

fiberphp / http-client

fiberphp

📡 FiberPHP HTTP 客户端 —— 支持熔断器、自动重试、链路追踪集成,协程异步,开箱即用。

Package info

gitee.com/fiberphp/http-client.git

Issues

pkg:composer/fiberphp/http-client

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

dev-master 2026-09-09 05:54 UTC

This package is auto-updated.

Last update: 2026-09-09 05:54:41 UTC


README

协程友好的 HTTP 客户端,封装 workerman/http-client。单例复用连接池,内置自动重试(指数退避)、熔断器、SSRF 防护与请求/响应日志脱敏,协程模式下同步写法、非阻塞执行。

环境要求

  • PHP >= 8.3
  • ext-json
  • workerman/http-client ^3.1
  • fiberphp/container dev-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,
    ],
];

特性

能力说明
连接池复用单例 Clientmax_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-jsonJSON 编解码
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