<?php

// 1. 定义目标服务器基础信息（需转发到的 HTTP 地址）
$targetHost = 'http://122.191.248.76:8080';
// 2. 拼接完整目标 URL（保留当前请求的路径和参数）
$targetUrl = $targetHost . $_SERVER['REQUEST_URI']; // $_SERVER['REQUEST_URI'] 会自动获取 /808gps/...?lang=...

// 3. 初始化 CURL（核心：代理发起请求）
$ch = curl_init();

// 4. 设置 CURL 关键选项（确保完整转发请求）
curl_setopt_array($ch, [
    // 目标 HTTP 地址
    CURLOPT_URL => $targetUrl,
    // 保留响应头信息（后续需透传给客户端）
    CURLOPT_HEADER => true,
    // 返回响应内容（而非直接输出）
    CURLOPT_RETURNTRANSFER => true,
    // 跟随目标服务器的重定向（若有）
    CURLOPT_FOLLOWLOCATION => true,
    // 忽略 HTTPS 证书校验（若目标是 HTTPS 需开启，此处目标是 HTTP 不影响，仅为兼容）
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_SSL_VERIFYHOST => false,
    // 传递客户端的请求方法（GET/POST 等）
    CURLOPT_CUSTOMREQUEST => $_SERVER['REQUEST_METHOD'],
    // 传递客户端的请求头（模拟真实浏览器请求）
    CURLOPT_HTTPHEADER => getClientHeaders(),
]);

// 5. 处理 POST 请求（若客户端是 POST，需传递请求体）
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $postData = file_get_contents('php://input'); // 获取 POST 原始数据
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
}

// 6. 执行 CURL 请求，获取响应（包含响应头 + 响应体）
$response = curl_exec($ch);
// 获取请求信息（如 HTTP 状态码）
$responseInfo = curl_getinfo($ch);
// 关闭 CURL 连接
curl_close($ch);

// 7. 分离响应头和响应体（CURL 会将头和体合并返回，需拆分）
$headerSize = $responseInfo['header_size'];
$responseHeaders = substr($response, 0, $headerSize);
$responseBody = substr($response, $headerSize);

// 8. 将目标服务器的响应头透传给客户端
$headerLines = explode("\r\n", $responseHeaders);
foreach ($headerLines as $line) {
    if (trim($line) === '') continue; // 跳过空行
    // 过滤掉 CURL 自身的 Connection 头，避免冲突
    if (stripos($line, 'Connection:') === 0) continue;
    header($line);
}

// 9. 设置 HTTP 状态码（与目标服务器一致）
http_response_code($responseInfo['http_code']);

// 10. 输出响应体（返回目标服务器的内容给客户端）
echo $responseBody;
exit;

/**
 * 辅助函数：获取客户端的请求头，透传给目标服务器
 */
function getClientHeaders() {
    $headers = [];
    foreach ($_SERVER as $key => $value) {
        // 筛选客户端请求头（PHP 中 $_SERVER 头信息以 HTTP_ 开头）
        if (strpos($key, 'HTTP_') === 0) {
            // 转换为标准头格式（如 HTTP_USER_AGENT → User-Agent）
            $headerName = str_replace('_', '-', ucwords(strtolower(str_replace('HTTP_', '', $key)), '_'));
            $headers[] = "$headerName: $value";
        }
    }
    return $headers;
}