#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 — неправильный пример.