当前位置:首页 > PHP

php实现http代理

2026-01-28 22:32:38PHP

PHP 实现 HTTP 代理

使用 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);

curl_close($ch);

header_remove();
foreach (explode("\r\n", $headers) as $header) {
    if (!empty($header)) {
        header($header);
    }
}
echo $body;
?>

使用 PHP 内置流处理

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

$context = stream_context_create([
    'http' => [
        'method' => $_SERVER['REQUEST_METHOD'],
        'header' => getallheaders(),
        'ignore_errors' => true
    ]
]);

$response = file_get_contents($targetUrl, false, $context);
foreach ($http_response_header as $header) {
    header($header);
}
echo $response;
?>

处理 POST 请求的代理

<?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_CUSTOMREQUEST, $_SERVER['REQUEST_METHOD']);

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    curl_setopt($ch, CURLOPT_POSTFIELDS, file_get_contents('php://input'));
}

$headers = [];
foreach (getallheaders() as $name => $value) {
    $headers[] = "$name: $value";
}
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

http_response_code($status);
echo $response;
?>

安全性注意事项

  • 验证目标 URL 的域名白名单
  • 限制可访问的协议(仅允许 http/https)
  • 过滤敏感头信息(如 Cookie、Authorization)
  • 设置超时限制防止长时间请求
  • 记录访问日志用于审计

性能优化建议

  • 启用缓存机制减少重复请求
  • 使用连接池复用 HTTP 连接
  • 压缩传输数据减少带宽消耗
  • 异步处理大文件传输

以上代码示例提供了不同复杂度的 PHP HTTP 代理实现方案,可根据实际需求选择适合的方法并添加必要的安全措施。

php实现http代理

标签: phphttp
分享给朋友:

相关文章

php实现文件下载

php实现文件下载

PHP 实现文件下载的方法 使用 header() 函数强制下载 设置正确的 HTTP 头信息,强制浏览器下载文件而不是直接打开。 $file = 'path/to/file.pdf'; if (f…

php实现验证码

php实现验证码

PHP实现验证码的方法 使用GD库生成验证码 GD库是PHP中处理图像的扩展,可用于生成验证码图片。 <?php session_start(); $width = 120; $height…

php如何实现直播

php如何实现直播

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

php实现登录

php实现登录

PHP 登录功能实现 数据库连接与用户表创建 创建一个数据库连接文件 db.php,用于管理数据库连接。MySQL 示例代码如下: <?php $host = 'localhost'; $d…

php验证码实现

php验证码实现

验证码实现方法 在PHP中实现验证码功能通常涉及生成随机字符串或数字,将其转换为图像,并通过会话(Session)进行验证。以下是几种常见的实现方式: 使用GD库生成图像验证码 GD库是PHP内置…

php购物车实现

php购物车实现

PHP购物车实现方法 使用PHP实现购物车功能可以通过多种方式完成,以下是几种常见的实现方法: Session存储购物车数据 利用PHP的$_SESSION超全局变量存储购物车数据是最简单的方法。用…