Полностью отключить перенаправление для Guzzle

Guzzle6 имеет один красивый вариант: allow_redirects, Если установить эту опцию на false значение, перенаправление блокировки Guzzle, если код ответа 302 или же Headers имеет Location пары.

Но есть одна проблема. Если редирект отправляет клиент - Guzzle этого не замечает. Например:

У нас есть какой-то URL http://example.com/ которые перенаправлены на страницу http://redirected.com/, Отправить заявку с помощью Guzzle:

$oClient->request('POST', 'http://redirected.com/', [
    'form_params' => $aFormData,
    'cookies' => (new CookieJar($aPrepareCookie)),
    'debug' => true,
    'allow_redirects' => false
]);

Предположим, что redirect.com имеет index.php как это:

<?php
    header('Location: http://www.example.com/');
?>

В этом случае перенаправление будет заблокировано от Guzzle.

Теперь давайте посмотрим на этот пример перенаправления:

<?php
    echo '<script>window.location = "http://www.example.com/";</script>';
?>

Здесь у нас есть проблема, потому что это перенаправление на стороне клиента, и это не может повлиять на Headers, Следовательно Guzzle не может отследить код состояния HTTP или значение местоположения.

Итак, как я могу решить эту проблему и найти решение?

Спасибо за помощь!

1 ответ

Как говорилось в предыдущих постерах, Guzzle не будет выполнять JavaScript.

Ваша проблема может быть легко решена с помощью промежуточного программного обеспечения Guzzle.

В промежуточном программном обеспечении:

  • получить ответ
  • разобрать тело для window.location="someurl"
  • выполнить запрос "someurl"
  • измените заголовок ответа от "someurl", чтобы включить тот факт, что это было перенаправление.
  • вернуть ответ.
Другие вопросы по тегам