Как получить ссылку из удаленных file_get_contents

#php #json #referrer

#php #json #реферер

Вопрос:

Я установил PHP-скрипт, который выводит JSON следующим образом:

 <?php
 // ref.php
print json_encode(array('ref' => $_SERVER["HTTP_REFERER"]), JSON_UNESCAPED_SLASHES);
?>
  

Приведенный выше код — это весь код в этом файле. Из другого файла я попытался прочитать вывод следующим образом:

 <?php
// ref_index.php
$json = file_get_contents('http://localhost/4test/ref.php'); 
$data = json_decode($json);
var_dump($data);
?>
  

Приведенный выше код возвращает NULL, потому что ref.php не удалось получить $_SERVER["HTTP_REFERER"] значение, поэтому, когда я заменяю $_SERVER["HTTP_REFERER"] любое фиксированное значение, такое как ‘бла-бла-бла`, возвращается объект json.

Мой вопрос: как я мог бы получить ссылку на file_get_contents (), то есть URL, с которого он запускается, для получения данных из моего приложения.

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

1. Каждая запись, начинающаяся с HTTP_ , взята из заголовка HTTP-запроса. Если вы не отправите Referer поле заголовка в своем запросе на ref.php , не будет $_SERVER["HTTP_REFERER"] .

2. $_SERVER содержит данные запроса, который вызвал ваш скрипт. Это не имеет абсолютно никакого отношения к http-запросу, который php будет выполнять к вашему ref.php скрипту. Это будет совершенно отдельный / независимый запрос.

Ответ №1:

Ссылка передается с использованием Origin заголовка в HTTP. Вам нужно будет установить этот заголовок в вашем file_get_contents() вызове. Для достижения этого вам нужно будет использовать настроенный контекст потока с помощью stream_context_create() и передать его в качестве третьего параметра в file_get_contents() :

 $opts = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Origin: SET REFERRER URL HERE"
  )
);

echo file_get_contents(
    'http://localhost/4test/ref.php',
    false,
    stream_context_create($opts)
);
  

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

1. О! Таким образом, я не смог выполнить аутентификацию для удаленного веб-сайта, который с ref.php ! Другими словами, я планировал проверить значение ссылки из списка зарегистрированных веб-сайтов, чтобы разрешить предоставление им данных. Есть ли какой-либо обходной путь, такой как Facebook использует со своими приложениями?!