当前位置:首页 > 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;

性能优化建议

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

php实现http代理

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

安全注意事项

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

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

标签: phphttp
分享给朋友:

相关文章

php实现分页

php实现分页

PHP实现分页的基本方法 使用原生PHP实现分页功能需要结合数据库查询和HTML展示。以下是核心实现步骤: 数据库查询与分页逻辑 // 连接数据库 $conn = new mysqli('loca…

php实现购物车

php实现购物车

PHP实现购物车功能 购物车功能是电商网站的核心模块之一,通常涉及商品添加、删除、数量修改和结算等操作。以下是使用PHP实现购物车功能的几种方法。 使用Session存储购物车数据 Session是…

php实现伪静态

php实现伪静态

PHP 实现伪静态的方法 伪静态(URL Rewrite)是一种将动态URL转换为看似静态URL的技术,提升SEO友好性和用户体验。以下是几种常见的实现方式: 使用 Apache 的 mod_rew…

php实现注册登陆

php实现注册登陆

PHP 注册功能实现 创建数据库表结构(MySQL示例): CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, usern…

php实现进度条

php实现进度条

PHP 实现进度条的方法 使用 HTML 和 CSS 结合 PHP 实现进度条 在 PHP 中,进度条通常通过 HTML 和 CSS 实现,PHP 负责计算进度并更新前端显示。 <di…

php 实现排名

php 实现排名

PHP 实现排名的方法 在 PHP 中实现排名功能通常涉及对数据进行排序、计算排名以及输出结果。以下是几种常见的实现方式: 基本数组排序排名 $scores = [85, 92, 78, 95, 8…