当前位置:首页 > PHP

php实现http代理

2026-02-13 20:39:55PHP

PHP 实现 HTTP 代理

使用 cURL 实现简单代理

通过 PHP 的 cURL 扩展可以实现基本的 HTTP 代理功能。以下是一个简单的代理脚本示例:

<?php
$targetUrl = $_GET['url'] ?? '';
if (empty($targetUrl)) {
    header('HTTP/1.1 400 Bad Request');
    exit('Missing URL parameter');
}

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $targetUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HEADER, true);

$response = curl_exec($ch);
$headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$headers = substr($response, 0, $headerSize);
$body = substr($response, $headerSize);

foreach (explode("\r\n", $headers) as $header) {
    if (!empty($header)) {
        header($header);
    }
}

echo $body;
curl_close($ch);
?>

处理 POST 请求

对于 POST 请求,需要额外处理请求体和请求方法:

$method = $_SERVER['REQUEST_METHOD'];
if ($method === 'POST') {
    $postData = file_get_contents('php://input');
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
    $headers = getallheaders();
    foreach ($headers as $name => $value) {
        if (strtolower($name) !== 'host') {
            curl_setopt($ch, CURLOPT_HTTPHEADER, ["$name: $value"]);
        }
    }
}

添加身份验证

如果需要为代理添加基本身份验证:

if (!isset($_SERVER['PHP_AUTH_USER']) || 
    $_SERVER['PHP_AUTH_USER'] !== 'username' || 
    $_SERVER['PHP_AUTH_PW'] !== 'password') {
    header('WWW-Authenticate: Basic realm="Proxy"');
    header('HTTP/1.0 401 Unauthorized');
    exit('Authentication required');
}

使用流上下文实现代理

PHP 的流上下文也可以实现简单的代理功能:

$context = stream_context_create([
    'http' => [
        'proxy' => 'tcp://proxy.example.com:8080',
        'request_fulluri' => true,
    ]
]);

$response = file_get_contents($targetUrl, false, $context);
header('Content-Type: ' . $http_response_header[0]);
echo $response;

性能优化建议

对于高频使用的代理,可以考虑以下优化措施:

  • 启用 OPcache 加速 PHP 执行
  • 使用连接池管理 cURL 句柄
  • 添加适当的缓存头控制
  • 实现请求限流防止滥用

安全注意事项

  • 验证目标 URL 防止 SSRF 攻击
  • 过滤敏感头信息如 Cookie、Authorization
  • 限制允许访问的域名白名单
  • 记录日志监控异常请求

以上方法提供了 PHP 实现 HTTP 代理的基本思路,实际应用中需要根据具体需求进行调整和完善。

php实现http代理

标签: phphttp
分享给朋友:

相关文章

git php实现

git php实现

Git 与 PHP 的集成实现 使用 PHP 执行 Git 命令 通过 PHP 的 exec()、shell_exec() 或 passthru() 函数可以直接调用 Git 命令,适用于服务器端操作…

php记住密码怎么实现

php记住密码怎么实现

使用Cookie实现记住密码功能 在PHP中,可以通过设置Cookie来记住用户的登录状态。以下是一个简单的实现方式: // 用户登录验证成功后 if ($login_success) {…

php如何实现直播

php如何实现直播

实现直播功能的方法 PHP可以通过结合其他技术和工具来实现直播功能。以下是几种常见的方法: 使用流媒体服务器 配置流媒体服务器如Nginx-RTMP、Red5或Wowza。这些服务器支持RTMP协…

php 实现购物车

php 实现购物车

PHP 实现购物车功能 购物车功能是电子商务网站的核心部分,可以通过 PHP 和 Session 或数据库来实现。以下是两种常见的实现方式: 使用 Session 存储购物车数据 Session…

php验证码的实现

php验证码的实现

PHP 验证码实现方法 使用 GD 库生成基础验证码 创建画布并生成随机字符串作为验证码内容: session_start(); $width = 120; $height = 40; $imag…

php实现推送

php实现推送

PHP 实现推送功能的方法 PHP 实现推送功能可以通过多种方式完成,包括 WebSocket、Server-Sent Events (SSE)、长轮询或第三方推送服务。以下是几种常见的方法: 使…