<?php 
/**
 * Простой прокси-сервер на PHP для изучения и модификации данных, 
 * передаваемых между браузером и сторонним сервером.
 * 
 * Запуск: 
 *
 * указать URL сайта в $base
 * php -S 127.0.0.1:9001 proxy.php
 *
 * После этого в браузере можно открывать http://127.0.0.1:9001/
 * и все запросы пойдут через прокси на указанный в $base адрес.
 */

// Для вывода данных в консоль
$stderr = fopen('php://stderr', 'w');

$url = $_SERVER['REQUEST_URI'];
$path = parse_url($url, PHP_URL_PATH);
$query = parse_url($url, PHP_URL_QUERY);

$newPath = ltrim($path, '/');
if ($query) {
    $newPath .= '?' . $query;
}

$base = 'https://someapprentice.github.io/maintaskforlayout/';
$proxyUrl = $base . $newPath;

// $context = stream_context_create();
$contents = @file_get_contents($proxyUrl /* , false, $context */);
// Получаем заголовки ответа из глобальной переменной (PHP!)
$headers = $http_response_header;
$firstLine = $headers[0];

if ($contents === false) {
    fwrite($stderr, "Request failed: $proxyUrl - $firstLine\n");
    header("HTTP/1.1 503 Proxy error");
    die("Proxy failed to get contents at $proxyUrl");
}

fwrite($stderr, "$proxyUrl - OK: $firstLine\n");

$allowedHeaders = "!^(http/1.1|server:|content-type:|last-modified|access-control-allow-origin|Content-Length:|Accept-Ranges:|Date:|Via:|Connection:|X-|age|cache-control|vary)!i";

// Прокидываем разрешенные заголовки
foreach ($headers as $header) {
    
    if (preg_match($allowedHeaders, $header)) {
        fwrite($stderr, "+ $header\n");
        header($header);
    } else {
        fwrite($stderr, "- $header\n");        
    }
}

echo $contents;