2015-11-24 4 views
0

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 код статуса или Расположение стоимость.

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

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

+1

guzzle не выполняет javascript, он просто выполняет HTTP-запрос - ваша проблема должна быть решена вниз по течению, поскольку она находится в том, что вы делаете с содержимым запроса. – Calimero

+0

@Calimero вы предлагаете получить страницу, на которой есть window.location, и вырезать это, например. Но, не может получить страницу, потому что сразу же выполняется перенаправление. – RomanGorbatko

+0

Я подозреваю, что вы выполняете запрос с жужжанием на веб-странице и отправляете содержимое запроса клиенту - только веб-браузер выполнит перенаправление JS. Guzzle является только HTTP-клиентом, он не выполняет свои обязанности, чтобы справиться с этим для вас. но вы можете легко фильтровать контент ответа, если это необходимо. – Calimero

ответ

1

Как и предыдущие плакаты, Guzzle не выполнит javascript.

Ваша проблема может быть легко решена путем использования Guzzle Middleware.

В промежуточном:

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