Можно ли использовать get_headers после сокрытия реферера?

Я использую этот код для получения ответа HTTP:

$url = "http://example.com/";
$headers = get_headers($url);
$header = substr($headers[0], 9, 3);
echo = $header;

это прекрасно работает, но мне нужно скрыть реферер, поэтому я использую http://href.li/ примерно так:

$url = "http://href.li/?http://example.com/";
$headers = get_headers($url);
$header = substr($headers[0], 9, 3);
echo = $header;

что приводит к 200 OK Код состояния HTTP независимо от статуса последней страницы. Можно ли вообще получить заголовок с последней страницы? Или есть другой подход для достижения этой цели, в то же время используя сервис скрытия реферера?

1 ответ

Решение

Вам не нужен сторонний сервис, чтобы скрыть вашего реферера в запросе такого рода, вы можете установить его так, как вам нужно, однако вы не можете сделать это с помощью get_headers функция. Вы могли бы сделать это с file_get_contents а также stream_context_create, В вашем случае, я думаю, что это будет что-то вроде этого:

$URL = 'http://example.com/';
$Context = stream_context_create(array(
    'http' => array(
        'method' => 'HEAD',
        'header' => 'Referer: '
    )
));
file_get_contents($URL, false, $Context);
$ResponseHeaders = $http_response_header;

$header = substr($ResponseHeaders[0], 9, 3);
echo $header;

stream_context_create создает контекст потока с любыми опциями для указанного вами запроса и file_get_contents делает запрос, используя этот контекст. После этого скрипт проверяет $http_response_header это своего рода магическая переменная, которая заполняется после HTTP-запросов к HTTP-URL-адресам и доступна только в локальной области, т. е. сразу после вызова функции, выполняющей HTTP-запрос, но не, скажем, в другой выполняемой функции после этого. Содержание $http_response_header в основном так же, как результат get_header() функция.

(Вы также можете использовать GET в приведенном выше примере, но если вам не нужно тело ответа, HEAD просто получает заголовки без тела. Кстати, PHP get_headers выдает GET запрос, который извлекает весь ответ, включая тело, которое затем отбрасывается. Но иногда принимающий сервер или скрипт не может обработать HEAD запрашивает или выполняет некоторые действия иначе, чем GET запрос - вы должны действительно попробовать и посмотреть, что работает для вас.)

Другие вопросы по тегам