Guzzle6
имеет один прекрасный вариант: allow_redirects
. Если эта опция установлена на значение false
, переадресация блокировки Gzzle перенаправляется, если код ответа, например 302
, или Headers
имеет Location
параметр.Полностью отключить перенаправление для Guzzle
Но есть одна проблема. Если перенаправление отправляется клиентом - Guzzle этого не замечает. Например:
У нас есть URL-адрес http://example.com/
, который перенаправлен на страницу http://redirected.com/
. Отправить запрос с помощью жрать:
$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/');
?>
В этом случае перенаправление будет заблокирован жрать.
Теперь давайте посмотрим этот перенаправлять пример:
<?php
echo '<script>window.location = "http://www.example.com/";</script>';
?>
Здесь мы имеем проблему, потому что это на стороне клиента редирект и его не может повлиять на Headers
, поэтому Guzzle
не может отслеживать HTTP код статуса или Расположение стоимость.
Итак, как я могу решить эту проблему и найти решение?
Спасибо за помощь!
guzzle не выполняет javascript, он просто выполняет HTTP-запрос - ваша проблема должна быть решена вниз по течению, поскольку она находится в том, что вы делаете с содержимым запроса. – Calimero
@Calimero вы предлагаете получить страницу, на которой есть window.location, и вырезать это, например. Но, не может получить страницу, потому что сразу же выполняется перенаправление. – RomanGorbatko
Я подозреваю, что вы выполняете запрос с жужжанием на веб-странице и отправляете содержимое запроса клиенту - только веб-браузер выполнит перенаправление JS. Guzzle является только HTTP-клиентом, он не выполняет свои обязанности, чтобы справиться с этим для вас. но вы можете легко фильтровать контент ответа, если это необходимо. – Calimero