当前位置:首页 > PHP

php实现http代理

2026-01-28 22:32:38PHP

php实现http代理

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实现搜索功能的方法 在PHP中实现搜索功能通常涉及数据库查询和用户输入的匹配。以下是几种常见的实现方式: 使用MySQL LIKE语句 通过简单的LIKE语句实现基础搜索: $searchT…

php实现注册

php实现注册

注册功能实现步骤 数据库准备 创建用户表,包含字段如id、username、password、email等。示例SQL: CREATE TABLE users ( id INT AUTO_I…

php队列的实现

php队列的实现

PHP队列的实现方式 PHP中实现队列功能可以通过多种方式,根据需求选择适合的方案: 使用数组实现基础队列 PHP数组本身支持队列操作,利用array_push和array_shift函数: $q…

php实现博客

php实现博客

使用PHP实现博客系统 数据库设计 创建数据库表存储博客文章和用户信息。常见的表包括posts(文章)和users(用户)。 CREATE TABLE users ( id INT AUTO…

php实现下载

php实现下载

PHP实现文件下载 使用PHP实现文件下载可以通过设置HTTP头部信息强制浏览器下载文件而非直接打开。以下是几种常见的方法: 方法一:直接输出文件内容 $file_path = 'path/to/…

php 实现类

php 实现类

PHP 类的基本实现 在 PHP 中,类通过 class 关键字定义,后跟类名和一对花括号。类名通常遵循大驼峰命名法(如 ClassName)。以下是基本语法: class ClassName {…