В API есть страница перенаправления - PHP

Мне нужно отправить данные в API с помощью PHP. В API есть страница перенаправления перед отображением окончательного результата. Следующий код показывает содержимое страницы перенаправления, а не конечный результат. Как мне дождаться окончательного результата?

$url = 'https://example.com/api';
$data = array('text' => "try");

$options = array(
   'http' => array(
    'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
    'method'  => 'GET',
    'content' => http_build_query($data)
    )
);
$context  = stream_context_create($options);
$result = file_get_contents($url, false, $context);
if ($result === FALSE) { /* Handle error */ }

echo $result;

P.S. Я получил этот код из одного из вопросов stackoverflow.

Что именно вы подразумеваете под «перенаправлением»? Страница возвращает код состояния HTTP 3xx?

Martin Heralecký 09.03.2018 14:58

@ MartinHeralecký Я имею в виду, что когда я перехожу к URL-адресу API (например, example.com/api?text=try) в моем браузере, он сначала показывает страницу перенаправления (например, подождите, пока процесс не будет завершен ...), а затем он показывает окончательный результат, который представляет собой файл . Мой код показывает исходный код html первой страницы.

heaven-of-intensity 09.03.2018 15:04

Возможно, для перенаправления браузера используется javascript, а не фактическое перенаправление http. Если это javascript, может быть, вы могли бы прочитать новый пункт назначения, а затем обновить вызов API, чтобы просто перейти прямо к конечному пункту назначения?

GreensterRox 09.03.2018 15:07

@GreensterRox Конечный URL-адрес назначения такой же, как и первый ...

heaven-of-intensity 09.03.2018 15:08
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать cURL, чтобы получить окончательный ответ, используя CURLOPT_FOLLOWLOCATION:

От документация:

CURLOPT_FOLLOWLOCATION: TRUE to follow any "Location: " header that the server sends as part of the HTTP header (note this is recursive, PHP will follow as many "Location: " headers that it is sent, unless CURLOPT_MAXREDIRS is set).

$url = 'https://example.com/api';
$data = array('text' => "try");

$full_url = $url . (strpos($url, '?') === FALSE ? '?' : '') 
            . http_build_query($data) ;

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $full_url) ;
curl_setopt($ch, CURLOPT_HTTPHEADER, [
     'Content-type: application/x-www-form-urlencoded',
]);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
curl_close ($ch);

var_dump($response) ;

Я попробовал этот код, но снова получил HTML-код перенаправляющей страницы.

heaven-of-intensity 09.03.2018 15:09

Возможно, перенаправление выполняется на JavaScript. Что такое HTTP-код и заголовки страницы перенаправления?

Syscall 09.03.2018 15:10

Да. Я это проверил. Перенаправление выполняется с использованием JavaScript.

heaven-of-intensity 09.03.2018 15:14

Таким образом, вы не можете сделать это с помощью PHP за один раз ... Вам нужно получить первую страницу, проанализировать и определить URL-адрес, а затем сделать новый запрос. Поскольку PHP не интерпретирует JavaScript.

Syscall 09.03.2018 15:16
github.com/aslushnikov/latex-online#api. Это веб-страница API. Код HTTP - 200.
heaven-of-intensity 09.03.2018 15:33

Другие вопросы по теме