Как мне игнорировать перемещенный заголовок с помощью file_get_contents в PHP?

#php

#php

Вопрос:

Я запрограммировал простого пользователя контента, который использует file_get_contents, но, к сожалению, для моего IP-адреса сайт теперь выдает ошибку 302, которая перенаправляет на изображение. Для всех остальных пользователей доступен обычный сайт.

Как мне переписать get_contents, чтобы он просто загружал содержимое веб-сайта и фактически не следовал перенаправлению?

 $html = file_get_contents("http://www.site.net/");
  

Ответ №1:

Вам нужно создать контекст:

 $context = stream_context_create(
    array (
        'http' => array (
            'follow_location' => false // don't follow redirects
        )
    )
);
$html = file_get_contents('http://www.site.net/', false, $context);
  

Смотрите руководство:

С учетом сказанного, весьма вероятно, что на странице не осталось содержимого. Нет ничего невозможного в том, чтобы обслуживать 302 заголовок, а также тело HTTP, но это явно неортодоксально.

Комментарии:

1. Помните, ‘follow_location’ доступен только начиная с PHP 5.3.4 (в любом случае, каждый должен запускать что-то новее этого.) Также необходим «max_redirects => 0» внутри внутреннего массива (см. Пример # 2 на php.net/manual/en/context.http.php )

Ответ №2:

Там нет содержимого. Перенаправление происходит в HTTP-ответе перед отправкой любого содержимого.

Сервер решает, что вы увидите (или нет).

Комментарии:

1. Перенаправление происходит с заголовками HTTP-ответа. Однако неправильно настроенный сервер может отправлять выходные данные, даже если он отправляет новое местоположение вместе с кодом ответа 302.

2. Этот ответ неверен (во избежание каких-либо сомнений). Как говорит @Oliver, небезопасно предполагать, что содержимое не отправляется с 302.

Ответ №3:

Я столкнулся с такой проблемой при доступе к содержимому Google Диска по прямой ссылке.

ХОРОШИЙ СПОСОБ: с приведенным ниже кодом это снова сработало:

 //Any google url. Thsi example is fake for Google Drive direct link.
$url = "https://drive.google.com/uc?id=0BxQKKJYjuNElbFBNUlBndmVHHAj";

$ch = curl_init();
curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);  
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 3);     
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$html = curl_exec($ch);
curl_close($ch);

echo $html;
  

Я протестировал его сегодня, 19.03.2018

НЕПРАВИЛЬНЫЙ СПОСОБ: после вызова file_get_contents возвращено 302 временно перемещенных

 //Any google url. Thsi example is fake for Google Drive direct link.
$url = "https://drive.google.com/uc?id=0BxQKKJYjuNElbFBNUlBndmVHHAj";
$html = file_get_contents($url);
echo $html; //print none because error 302.
  

Комментарии:

1. не является file_get_contents .

2. Вы знаете, что вы написали? file_get_contents — неправильный пример.