当前位置:首页 > 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 代理实现方案,可根据实际需求选择适合的方法并添加必要的安全措施。

标签: phphttp
分享给朋友:

相关文章

php如何实现直播

php如何实现直播

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

php实现静态

php实现静态

静态化实现方法 PHP实现静态化主要通过生成HTML文件或缓存机制来减少服务器动态解析的开销。以下是几种常见方法: 生成静态HTML文件 通过file_put_contents()将动态内容保存为H…

php实现的分页

php实现的分页

PHP 实现分页的方法 基本分页逻辑 分页的核心在于计算总页数、当前页码以及数据偏移量。假设每页显示 10 条数据: $current_page = isset($_GET['page']) ? (…

无限分类实现 php

无限分类实现 php

无限分类的实现方法 无限分类通常用于构建多层级结构的数据,如商品分类、部门架构等。以下是几种常见的实现方式: 邻接列表模式(Adjacency List) 邻接列表是最简单的实现方式,通过在每个记录…

php实现注册登录

php实现注册登录

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

php变量的实现

php变量的实现

PHP变量的实现机制 PHP变量的实现基于Zend引擎的底层数据结构。核心结构体zval用于存储变量类型和值,其设计允许动态类型转换和高效内存管理。 zval结构体 PHP变量通过zval结构体实现…