pfinalclub/asyncio-http

PHP 异步系统里,一个不抢戏、却不可替代的基础件

Installs: 0

Dependents: 0

Suggesters: 0

Security: 0

Stars: 1

Watchers: 0

Forks: 0

pkg:composer/pfinalclub/asyncio-http

1.0.0 2026-01-09 05:50 UTC

This package is auto-updated.

Last update: 2026-01-09 05:56:46 UTC


README

🚀 PHP 异步 HTTP 客户端库 v1.0.0
一个不抢戏、却不可替代的基础件,专为异步系统设计的轻量级 HTTP 客户端

PHP Version License Version

✨ 特性

  • 🚀 异步非阻塞 - 基于 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        # 运行测试

设计原则

  1. HTTP 是 I/O,不是抽象
  2. 策略必须在库外
  3. 状态可见,决策不可见
  4. 任何模块都可以被整体替换

明确的边界

✅ 支持的功能:

  • 异步 HTTP 客户端
  • 连接池复用
  • 请求/响应基础处理
  • 并发控制

❌ 明确禁止:

  • 重试策略
  • 中间件
  • 拦截器
  • 自动 JSON 序列化
  • HTTP Server

这正是它该在的位置。