#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 использует со своими приложениями?!