weijiajia / http-proxy-manager
A Laravel package for managing HTTP proxies from various proxy service providers with a unified API
dev-main
2025-03-11 04:52 UTC
Requires
- php: ^8.1
- illuminate/collections: ^9.0|^10.0|^11.0|^12.0
- illuminate/support: ^9.0|^10.0|^11.0|^12.0
- saloonphp/saloon: ^3.0
- weijiajia/saloonphp-logs-plugin: @dev
Requires (Dev)
- laravel/pint: ^1.0
- orchestra/testbench: ^7.0|^8.0|^9.0
- pestphp/pest: ^3.0
- symfony/var-dumper: ^6.0|^7.0
This package is auto-updated.
Last update: 2025-03-11 04:54:18 UTC
README
A Laravel package for managing HTTP proxies from various proxy service providers with a unified API.
简介
HTTP Proxy Manager 是一个用于管理多个代理服务提供商的 Laravel 包。它提供了一个统一的接口来处理不同代理服务商的 API,使您可以轻松切换和管理 HTTP 代理,而无需修改应用程序代码。
该包基于 Saloon PHP 构建,提供了一个流畅且一致的 API 来处理 HTTP 请求。
功能特点
- 统一的接口管理多个代理服务提供商
- 支持动态代理和账号密码认证代理
- 可配置的代理提供商设置
- 与 Laravel 框架无缝集成
- 基于驱动的设计,便于扩展
支持的代理服务提供商
- 华声代理 (HuaSheng)
- Storm Proxies
- 豌豆代理 (Wandou)
- IP Royal
- Smart 代理 (Smartdaili)
- Oxylabs
- Proxyscrape
安装
通过 Composer 安装:
composer require weijiajia/http-proxy-manager
配置
发布配置文件
首先,发布配置文件:
php artisan vendor:publish --provider="Weijiajia\HttpProxyManager\ProxyManagerServiceProvider"
这将在 config/http-proxy-manager.php
创建配置文件。
环境变量
在您的 .env
文件中设置默认的代理驱动:
PROXY_DRIVER=huashengdaili
配置文件
配置文件 http-proxy-manager.php
包含了所有支持的代理服务提供商的设置。您可以根据需要修改这些设置:
return [ 'name' => 'proxyManager', 'default' => env('PROXY_DRIVER', 'huashengdaili'), 'providers' => [ 'huashengdaili' => [ 'default_mode' => 'dynamic', 'connector' => \Weijiajia\HttpProxyManager\Proxys\HuaSheng\HuaShengConnector::class, 'mode' => [ 'dynamic' => [ 'request' => \Weijiajia\HttpProxyManager\Proxys\HuaSheng\Request\Dynamic::class, 'dto' => \Weijiajia\HttpProxyManager\Proxys\HuaSheng\Data\Dynamic::class, 'default_config' => [ // 默认配置项... ], ], ], ], // 其他代理服务提供商配置... ], ];
使用方法
基本用法
use Weijiajia\HttpProxyManager\ProxyManager; // 使用默认驱动获取代理 $proxyManager = new ProxyManager(app()); $proxy = $proxyManager->connector()->default(); // 或使用特定驱动 $proxy = $proxyManager->connector('huashengdaili')->default();
获取动态代理
// 获取动态代理 $proxies = $proxyManager->connector()->dynamic(); // 获取代理信息 foreach ($proxies as $proxy) { echo $proxy->getIp(); // 代理 IP echo $proxy->getPort(); // 代理端口 echo $proxy->getProtocol(); // 代理协议 }
获取账号密码认证代理
// 获取账号密码认证代理 $proxy = $proxyManager->connector()->accountPassword(); echo $proxy->getIp(); // 代理 IP echo $proxy->getPort(); // 代理端口 echo $proxy->getUsername(); // 用户名 echo $proxy->getPassword(); // 密码 echo $proxy->getProtocol(); // 代理协议
不使用 Laravel 框架的用法
本包也可以在非 Laravel 项目中使用。以下示例展示了如何直接使用连接器发送请求。
使用花生代理连接器
use Weijiajia\HttpProxyManager\Proxys\HuaSheng\HuaShengConnector; use Weijiajia\HttpProxyManager\Proxys\HuaSheng\Request\Dynamic; use Weijiajia\HttpProxyManager\Proxys\HuaSheng\Data\Dynamic as DynamicData; // 创建数据对象 $data = new DynamicData([ 'time' => 10, // IP 有效时长(分钟) 'count' => 1, // 提取的 IP 数量 'protocol' => 'HTTP', // IP 协议 'type' => 'json' // 返回类型 ]); // 创建请求对象 $request = new Dynamic(['data' => $data]); // 创建连接器 $connector = new HuaShengConnector($request); // 发送请求并获取动态代理 $proxies = $connector->dynamic(); // 使用代理 foreach ($proxies as $proxy) { echo "代理 IP: " . $proxy->getIp() . "\n"; echo "代理端口: " . $proxy->getPort() . "\n"; echo "代理协议: " . $proxy->getProtocol() . "\n"; }
使用 IP Royal 账号密码认证代理
use Weijiajia\HttpProxyManager\Proxys\IpRoyal\IpRoyalConnector; use Weijiajia\HttpProxyManager\Proxys\IpRoyal\Request\Residential; use Weijiajia\HttpProxyManager\Proxys\IpRoyal\Data\Residential as ResidentialData; // 创建数据对象 $data = new ResidentialData([ 'protocol' => 'http', 'sticky_session' => false, 'session_duration' => 10, 'endpoint' => 'geo.iproyal.com' ]); // 创建请求对象 $request = new Residential(['data' => $data]); // 创建连接器 $connector = new IpRoyalConnector($request); // 发送请求并获取账号密码认证代理 $proxy = $connector->accountPassword(); // 使用代理 echo "代理 IP: " . $proxy->getIp() . "\n"; echo "代理端口: " . $proxy->getPort() . "\n"; echo "用户名: " . $proxy->getUsername() . "\n"; echo "密码: " . $proxy->getPassword() . "\n"; echo "代理 URL: " . $proxy->getUrl() . "\n";
在 HTTP 客户端中使用代理
use GuzzleHttp\Client; // 假设我们已经获取了代理信息 $proxy = $connector->default(); // 使用 Guzzle HTTP 客户端发送请求 $client = new Client([ 'proxy' => $proxy->getUrl(), 'auth' => [ $proxy->getUsername(), $proxy->getPassword() ] ]); // 通过代理发送请求 $response = $client->get('https://api.ipify.org?format=json'); $ipInfo = json_decode($response->getBody(), true); echo "通过代理显示的 IP: " . $ipInfo['ip'] . "\n";
代理模式
该包支持两种主要的代理模式:
- 动态代理 (
dynamic
): 提供动态变化的 IP 地址 - 账号密码代理 (
flow
): 提供需要用户名和密码认证的代理
自定义代理提供商
您可以通过扩展基类来添加自己的代理提供商:
- 创建 Connector 类扩展
ProxyConnector
- 创建 Request 类扩展
ProxyRequest
并实现DynamicInterface
或AccountPasswordInterface
- 创建 DTO 类扩展
Proxy
或Proxys
- 在配置文件中添加您的新代理提供商
贡献
欢迎对此项目做出贡献!请随时提交问题或拉取请求。
许可证
本项目使用 MIT 许可证 - 详情请查看 LICENSE 文件。