Symfony 4.3 PHP: как прочитать файл cookie из ответа на перенаправление 302?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Symfony 4.3 PHP: как прочитать файл cookie из ответа на перенаправление 302?

Сообщение Anonymous »

Что я хочу сделать (в контроллере)


[*]Получить запрос, на основании которого
[*]Отправить внешний HTTP-запрос
[*]Проанализировать ответ, на основе которого
[*]Вернуть ответ


Я планирую иметь несколько функций, которые будут следовать этому шаблону. Они вызываются один за другим, последовательно.

В Symfony 4.3 представлены компонент HttpClient и компонент BrowserKit, которые на первый взгляд кажутся отвечающими всем требованиям. Но, как оказалось, все становится сложнее. Внешние HTTP-запросы отправляются на сервер, который отслеживает сеансы с помощью файлов cookie, что не должно быть чем-то необычным. Если запрос отправляется без файлов cookie, сервер всегда отвечает тем же содержимым целевой страницы. Итак, нам понадобится печенье. Не беспокойтесь, ответ на первоначальный запрос содержит заголовок «Set-Cookie», содержащий файл cookie, который отправляется в заголовке «Cookie» в последующих запросах. HTTP-статус ответа с файлом cookie — «302 Found», который в обычной веб-среде с помощью веб-браузера перенаправляет на следующую страницу с тем же файлом cookie в запросе. Воспроизвести это действие в моем контроллере Symfony кажется очень сложной задачей. Подробно о шаге 2 того, что я хочу сделать сейчас:

2.a. Отправьте внешний HTTP-запрос

2.b. Прочитайте файл cookie из ответа 302 (без автоматического перенаправления)

2.c. Установите заголовок «Cookie» последующего запроса, значение которого поступает из 2.b.

2.d. Отправьте запрос новой цели (указанной в заголовке «Местоположение» ответа 302)

Вот часть кода контроллера:

Код: Выделить всё

use Symfony\Component\HttpClient\HttpClient;
use Symfony\Component\HttpClient\Exception\RedirectionException;
use Symfony\Component\HttpFoundation\JsonResponse;

public function init(Request $request): JsonResponse
{
$url = "external url";
$client = HttpClient::create();
try {
$response = $client->request('GET', $url, [
'max_redirects' => -1
]);
} catch (RedirectionException $redirectionException) {

}
return new JsonResponse([], 200);
}
Отказ от установки max_redirects означает, что клиент следует перенаправлениям и в конечном итоге возвращает ответ 200 без каких-либо файлов cookie. Установка значения -1 вызовет
исключение перенаправления, и ответ 302 с файлом cookie, похоже, будет потерян.

Я также пробовал Компонент HttpBrowser:

Код: Выделить всё

$cookieJar = new CookieJar();
$client = new HttpBrowser(HttpClient::create(), null, $cookieJar);
$client->request('GET', $url);
Но я получаю ответ 200 без файла cookie, поскольку он автоматически следует за перенаправлениями.

Я понимаю, что Упомянутые здесь компоненты являются новыми для Symfony 4.3 и «экспериментальными», но я также не думаю, что моя задача слишком сложна или необычна. Но, может быть, есть другие http-клиенты для Symfony, которые лучше подойдут для этой задачи?

Подробнее здесь: https://stackoverflow.com/questions/578 ... n-response
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»