pfinalclub / asyncio-http
PHP 异步系统里,一个不抢戏、却不可替代的基础件
Installs: 0
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 0
Forks: 0
pkg:composer/pfinalclub/asyncio-http
Requires
- pfinalclub/asyncio: ^3.0
- pfinalclub/asyncio-debug: ^1.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.0
This package is auto-updated.
Last update: 2026-01-09 05:56:46 UTC
README
🚀 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 |
🔧 高级用法
支持的 HTTP 方法
// 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();
📚 API 文档
Http 类方法
| 方法 | 描述 | 参数 |
|---|---|---|
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 |
RequestBuilder 类方法
| 方法 | 描述 | 参数 |
|---|---|---|
header(string $key, string $value) |
设置单个请求头 | $key: 头部键, $value: 头部值 |
headers(array $headers) |
批量设置请求头 | $headers: 头部数组 |
body(mixed $body) |
设置请求体 | $body: 字符串/数组/对象 |
timeout(float $seconds) |
设置超时时间 | $seconds: 超时秒数 |
send() |
发送请求 | - |
HttpResponse 类属性
| 属性 | 类型 | 描述 |
|---|---|---|
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
这正是它该在的位置。