PHP - В любом случае установить реферер при использовании simplexml_load_file для загрузки файла XML с URL?

0

Vimeo.com позволяет ограничивать встраивание видео в определенные области. Однако при встраивании видео у меня есть скрипт, который запрашивает Vimeo для получения подробной информации о видео. Этот запрос выполняется с помощью функции PHP simplexml_load_file(), целевой URL - это URL видео Vimeo. Так как поле referrer пустое, однако Vimeo не разрешает доступ к видео, и сценарий не может получить информацию о видео.

К сожалению, Vimeo не разрешает переадресацию IP-адресов, единственным способом настройки конфиденциальности является установка реферера, чтобы он выглядел так, как будто запрос поступает из браузера, который пытается посмотреть видео на моем сайте.

Мне нужно знать, как я могу установить referrer-. Я не вижу way-, надеясь, что я кое-что упустил.

Конкретная строка:

  $sxml = simplexml_load_file($target_url);
Теги:
header
vimeo
referrer

3 ответа

0
Лучший ответ

Да, ты можешь. Вы можете установить все заголовки, в которые хотите включить simplexml_load_file для simplexml_load_file, установив поле заголовка в так называемом контексте потока для этой функции.

Это делается через libxml_set_streams_context.

Пример кода (pinback не работает, он просто показывает, что загрузка XML работает и как устанавливать заголовки):

$options = [
    "http" => [
        "header"        => "Accept-language: en\r\n" .
                           "Referer: http://www.example.com\r\n",
        "ignore_errors" => true,
    ]
];
$context = stream_context_create($options);
libxml_set_streams_context($context);

$url = "http://vimeo.com/_pingback";

$sxl = simplexml_load_file($url);
$sxl->asXML("php://output");

Выпущенный вопрос:

  • Проблемы simplexml_load_file. Ответ показывает, как использовать потоковые контексты с file_get_contents затем передать тело ответа HTTP на simplexml_load_string.
0

Я знаю, что ваш вопрос конкретно связан с настройкой реферера, но есть некоторые проблемы с вашей оригинальной идеей.

То, как вы получаете доступ к метаданным видео, не поддерживается Vimeo и будет прервано в будущем без какого-либо расширенного предупреждения.

API Vimeo является единственным поддерживаемым способом получения метаданных видео.

  • 0
    Спасибо, что указали на это, к сожалению, пакет кода, с которым я работаю, уже устарел и не поддерживается. Будем только надеяться, что он продержится достаточно долго.
0

Вы можете использовать curl:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $target_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, 'http://www.example.com/1');
$xml = curl_exec($ch);

$sxml = simplexml_load_string($xml);
  • 0
    Я ценю это, но я не могу полагаться на то, что cURL всегда доступен. По этой причине я буду принимать другой ответ. Благодарю вас.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню