Полностью отключить перенаправление для 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", чтобы включить тот факт, что это было перенаправление.
- вернуть ответ.