当前位置:首页 > 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 请求,需要额外处理请求体和请求方法:

php实现http代理

$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"]);
        }
    }
}

添加身份验证

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

php实现http代理

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 代理的基本思路,实际应用中需要根据具体需求进行调整和完善。

标签: phphttp
分享给朋友:

相关文章

php实现搜索功能

php实现搜索功能

实现基础搜索功能 使用PHP和MySQL实现基础的搜索功能需要结合表单提交与数据库查询。创建一个HTML表单用于接收用户输入的搜索关键词,通过PHP处理表单数据并查询数据库。 // 搜索表单 (HT…

php实现打印功能

php实现打印功能

PHP 实现打印功能的方法 PHP 可以通过多种方式实现打印功能,具体取决于打印的目标(如打印机、PDF、网页等)和需求(如直接打印、生成打印预览等)。以下是几种常见的实现方式: 使用 JavaSc…

php实现队列

php实现队列

PHP实现队列的方法 队列是一种先进先出(FIFO)的数据结构,PHP可以通过多种方式实现队列功能。 使用数组模拟队列 PHP数组可以模拟队列的基本操作,通过array_push和array_shi…

php搜索功能实现

php搜索功能实现

实现基本的PHP搜索功能 使用MySQL数据库和PHP实现简单的关键词搜索功能。需要确保数据库中有可供搜索的表和数据。 // 连接数据库 $conn = new mysqli('localhost'…

php实现统计

php实现统计

PHP 实现统计功能 在 PHP 中实现统计功能通常涉及数据的收集、处理和展示。以下是一些常见的统计实现方法: 数据库数据统计 通过 SQL 查询可以直接从数据库中获取统计结果: $conn =…

php 实现单点登录

php 实现单点登录

PHP 实现单点登录的方法 单点登录(SSO)允许用户通过一次登录访问多个相互信任的系统。以下是基于 PHP 的实现方案: 基于共享 Session 的方案 在同一个主域名下的子域名间可以通过共享…