🚀 PHP 异步 HTTP 客户端库 v1.0.0
一个不抢戏、却不可替代的基础件,专为异步系统设计的轻量级 HTTP 客户端
- 🚀 异步非阻塞 - 基于 Fiber 的现代异步执行模型
- 🔄 连接复用 - 智能连接池管理,提高性能
- 🛡️ 类型安全 - 严格的类型声明和边界检查
- 📦 极简设计 - 9个核心类,职责清晰,易于理解
- 🔧 协议完整 - 支持 HTTP/1.1 完整协议栈
- 🧪 测试完备 - 完善的单元测试覆盖
- 📋 代码规范 - 100% 符合 PSR-12 编码标准
composer require pfinalclub/asyncio-http<?php
require_once 'vendor/autoload.php';
use Pfinalclub\AsyncioHttp\Client\Http;
// GET 请求示例
$response = Http::get('https://api.example.com/users')
->header('Authorization', 'Bearer token')
->timeout(5.0)
->send();
// POST 请求示例
$response = Http::post('https://api.example.com/users', [
'name' => 'John',
'email' => 'john@example.com'
])
->header('Content-Type', 'application/json')
->send();
// 处理响应
if ($response->statusCode >= 200 && $response->statusCode < 300) {
echo "请求成功: " . $response->body;
} else {
echo "请求失败: " . $response->statusCode;
}本项目严格遵循极简设计原则,实现了一个功能完整的异步 HTTP 客户端库。
| 模块 | 职责 | 核心类 |
|---|---|---|
| Client/ | 用户入口层 | Http, RequestBuilder |
| Core/ | 请求生命周期管理 | HttpTask, HttpState, HttpScheduler |
| Transport/ | Workerman I/O 实现 | WorkermanHttpClient |
| Pool/ | 连接复用 | ConnectionPool |
| Protocol/ | HTTP 报文边界处理 | HttpMessageReader, RequestEncoder |
| Support/ | 工具类 | UrlParser, HeaderBag, Awaitable |
// GET 请求
Http::get('https://api.example.com/users')
->send();
// POST 请求
Http::post('https://api.example.com/users', ['name' => 'John'])
->send();
// PUT 请求
Http::put('https://api.example.com/users/123', ['name' => 'Jane'])
->send();
// PATCH 请求
Http::patch('https://api.example.com/users/123', ['email' => 'new@example.com'])
->send();
// DELETE 请求
Http::delete('https://api.example.com/users/123')
->send();
// HEAD 请求
Http::head('https://api.example.com/users')
->send();
// OPTIONS 请求
Http::options('https://api.example.com/users')
->send();// 设置超时时间
Http::get('https://api.example.com/users')
->timeout(10.0) // 10秒超时
->send();
// 设置多个头部
Http::get('https://api.example.com/users')
->header('Authorization', 'Bearer token')
->header('User-Agent', 'MyApp/1.0')
->header('Accept', 'application/json')
->send();
// 批量设置头部
Http::get('https://api.example.com/users')
->headers([
'Authorization' => 'Bearer token',
'User-Agent' => 'MyApp/1.0',
'Accept' => 'application/json'
])
->send();
// 设置请求体
Http::post('https://api.example.com/users')
->body(['name' => 'John', 'email' => 'john@example.com'])
->send();| 方法 | 描述 | 参数 |
|---|---|---|
get(string $url) |
创建 GET 请求 | $url: 请求URL |
post(string $url, mixed $body = null) |
创建 POST 请求 | $url: 请求URL, $body: 请求体 |
put(string $url, mixed $body = null) |
创建 PUT 请求 | $url: 请求URL, $body: 请求体 |
patch(string $url, mixed $body = null) |
创建 PATCH 请求 | $url: 请求URL, $body: 请求体 |
delete(string $url) |
创建 DELETE 请求 | $url: 请求URL |
head(string $url) |
创建 HEAD 请求 | $url: 请求URL |
options(string $url) |
创建 OPTIONS 请求 | $url: 请求URL |
| 方法 | 描述 | 参数 |
|---|---|---|
header(string $key, string $value) |
设置单个请求头 | $key: 头部键, $value: 头部值 |
headers(array $headers) |
批量设置请求头 | $headers: 头部数组 |
body(mixed $body) |
设置请求体 | $body: 字符串/数组/对象 |
timeout(float $seconds) |
设置超时时间 | $seconds: 超时秒数 |
send() |
发送请求 | - |
| 属性 | 类型 | 描述 |
|---|---|---|
statusCode |
int |
HTTP 状态码 |
headers |
array<string, string> |
响应头部 |
body |
string |
响应体 |
运行测试套件:
# 运行所有测试
composer test
# 运行测试(不生成覆盖率报告)
composer test-fast
# 代码风格检查
composer cs-check
# 代码风格修复
composer cs-fix
# 静态分析
composer phpstan欢迎提交 Issue 和 Pull Request!
本项目基于 MIT 许可证开源。
composer cs-check # 检查代码风格
composer cs-fix # 修复代码风格
composer phpstan # 静态分析
composer test # 运行测试- HTTP 是 I/O,不是抽象
- 策略必须在库外
- 状态可见,决策不可见
- 任何模块都可以被整体替换
✅ 支持的功能:
- 异步 HTTP 客户端
- 连接池复用
- 请求/响应基础处理
- 并发控制
❌ 明确禁止:
- 重试策略
- 中间件
- 拦截器
- 自动 JSON 序列化
- HTTP Server
这正是它该在的位置。