В PHP get_headers() принимает контекст потока как третий аргумент. В PHP 8 проверка заголовков для HTTP-адреса может нести собственную конфигурацию прокси:

$context = stream_context_create([
    'http' => [
        'proxy' => 'tcp://proxy.example.net:8080',
        'request_fulluri' => true,
        'method' => 'HEAD',
        'follow_location' => 0,
        'timeout' => 10,
    ],
]);

$headers = get_headers('http://example.net/file.zip', false, $context);
if ($headers === false) {
    throw new RuntimeException('Header request failed');
}

Прокси — это TCP-конечная точка для обёртки потока HTTP. Замените его хост-заполнитель и порт на не прошедшего аутентификацию кандидата из списка HTTP-прокси для этой публичной HTTP-проверки. request_fulluri передаёт полный URI назначения в строке HTTP-запроса, как ожидают многие пересылающие прокси. Этот контекст принадлежит данному вызову; он не меняет контекст по умолчанию, который используют другие чтения URL.

Несмотря на название функции, метод запроса по умолчанию — GET. Явный метод HEAD запрашивает у сервера метаданные ответа без соответствующего тела ответа. Сервер может отклонить HEAD или обработать его иначе, поэтому успешная проверка заголовков не доказывает, что последующая загрузка удастся.

Здесь следование перенаправлениям отключено, чтобы изучить первый ответ. Заголовок Location и статус перенаправления тогда становятся полезными результатами, а не указанием получить другой URL. Если проверка должна следовать перенаправлениям, измените эту политику осознанно и учтите дополнительные заголовки ответа.

Аргумент false сохраняет индексированный массив заголовков. Используйте true, когда ассоциативный разбор полезнее.

Похожие статьи