weijiajia/saloonphp-http-proxy-plugin
Composer 安装命令:
composer require weijiajia/saloonphp-http-proxy-plugin
包简介
A robust HTTP proxy management plugin for Saloon PHP, allowing easy proxy rotation and failover.
README 文档
README
A robust HTTP proxy management plugin for Saloon PHP, allowing you to easily use and rotate proxies in your API requests.
Table of Contents
Features
- 🔄 Stateless proxy management aligned with Saloon design principles
- 🔌 Automatic proxy fallback on connection failures
- 🔀 Customizable proxy rotation strategies (FIFO queue with round-robin support)
- 🔐 Support for authenticated proxies (username/password)
- 🧩 Simple integration with Saloon requests and connectors
- 🚦 Dynamic proxy availability management
- 🔍 Smart handling of proxy failures with custom exceptions
Requirements
- PHP 8.0 or higher
- Saloon PHP v2.0 or higher
Installation
You can install the package via composer:
composer require weijiajia/saloonphp-http-proxy-plugin
Usage
Basic Setup
- Implement the
ProxyManagerInterfacein your connector or request class - Add the
HasProxytrait to your Saloon connector or request class:
use Saloon\Http\Connector; use Weijiajia\SaloonphpHttpProxyPlugin\HasProxy; use Weijiajia\SaloonphpHttpProxyPlugin\Contracts\ProxyManagerInterface; class MyApiConnector extends Connector implements ProxyManagerInterface { use HasProxy; public function resolveBaseUrl(): string { return 'https://api.example.com'; } }
Adding Proxies
Add proxies to your connector or request object:
// Create a connector $connector = new MyApiConnector(); // Add proxies from URLs $connector->getProxyQueue()->enqueue('http://proxy1.example.com:8080'); $connector->getProxyQueue()->enqueue('http://user:pass@proxy2.example.com:8080'); // Or use Proxy objects use Weijiajia\SaloonphpHttpProxyPlugin\Proxy; $proxy = new Proxy( host: 'proxy3.example.com', port: 8080, url: 'http://proxy3.example.com:8080', type: 'http', username: 'user', password: 'pass' ); $connector->getProxyQueue()->enqueue($proxy); // Set a custom proxy queue use Weijiajia\SaloonphpHttpProxyPlugin\ProxySplQueue; $proxyQueue = new ProxySplQueue(roundRobinEnabled: true, proxies: ['http://proxy1.example.com:8080']); $connector->withProxyQueue($proxyQueue); // Use new method name
Proxy Rotation
Enable round-robin proxy rotation to cycle through available proxies:
// Enable round-robin mode directly on the proxy queue $connector->getProxyQueue()->setRoundRobinEnabled(true); // Or use the convenience method $connector->roundRobin(true);
Force Using Proxies
You can force your requests to only proceed if a proxy is available:
$connector->withForceProxy(true); // Default is true
Temporarily Disable Proxies
$connector->withProxyEnabled(false);
Proxy Availability Management
You can mark proxies as available or unavailable:
// Get all proxies in the queue $proxies = $connector->getProxyQueue()->getAllProxies(); // Mark a proxy as unavailable $proxies[0]->setAvailable(false); // Check if a proxy is available $isAvailable = $proxies[0]->isAvailable(); // returns false
Advanced Usage
Custom Proxy Queue
You can implement your own proxy queue by extending the ProxySplQueue class:
use Weijiajia\SaloonphpHttpProxyPlugin\ProxySplQueue; use Weijiajia\SaloonphpHttpProxyPlugin\Contracts\ProxyInterface; class PrioritizedProxyQueue extends ProxySplQueue { // Your custom implementation with prioritization public function dequeue(): mixed { // Custom dequeue logic that considers priority // ... } // You can also implement additional methods public function addWithPriority(ProxyInterface $proxy, int $priority): void { // Custom logic to add proxy with priority } } $connector->withProxyQueue(new PrioritizedProxyQueue());
Request-Specific Proxies
The HasProxy trait can be used on individual requests as well:
use Saloon\Http\Request; use Weijiajia\SaloonphpHttpProxyPlugin\HasProxy; use Weijiajia\SaloonphpHttpProxyPlugin\Contracts\ProxyManagerInterface; class MyApiRequest extends Request implements ProxyManagerInterface { use HasProxy; protected ?string $method = 'GET'; public function resolveEndpoint(): string { return '/api/endpoint'; } public function __construct() { // Add request-specific proxies $this->getProxyQueue()->enqueue('http://request-specific-proxy.example.com:8080'); } }
Error Handling
use Weijiajia\SaloonphpHttpProxyPlugin\Exceptions\NoAvailableProxyException; use Weijiajia\SaloonphpHttpProxyPlugin\Exceptions\HasProxyException; try { $connector->withForceProxy(true); $response = $connector->send(new MyRequest()); } catch (NoAvailableProxyException $e) { // Handle the case when no proxies are available echo "No proxies available: " . $e->getMessage(); } catch (HasProxyException $e) { // Handle interface implementation issues echo "Proxy configuration error: " . $e->getMessage(); } catch (\Exception $e) { // Handle other exceptions echo "Request error: " . $e->getMessage(); }
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This package is open-sourced software licensed under the MIT license.
Credits
weijiajia/saloonphp-http-proxy-plugin 适用场景与选型建议
weijiajia/saloonphp-http-proxy-plugin 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 117 次下载、GitHub Stars 达 1, 最近一次更新时间为 2025 年 03 月 08 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「http」 「api」 「proxy」 「rotation」 「round-robin」 「saloon」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 weijiajia/saloonphp-http-proxy-plugin 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 weijiajia/saloonphp-http-proxy-plugin 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 weijiajia/saloonphp-http-proxy-plugin 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Lazy loading for middleware and request handlers
repository php library
A PSR-7 compatible library for making CRUD API endpoints
http客户端
Easily add Excepct-CT header to your project
Build mini web servers in PHP for testing
统计信息
- 总下载量: 117
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 25
- 依赖项目数: 2
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-03-08