Как в Guzzle получить финальную ссылку после редиректа

Ещё одна повседневная задача — узнать адрес ссылки на которую был совершён редирект после HTTP-запроса. Однако, при работе с библиотекой Guzzle делается это не очень очевидно. Во-первых, нужно разрешить клиенту совершать редиректы: ‘allow_redirects’ => [ ‘max’ => 5, ‘strict’ => true]. Во-вторых, нужно включить запись редиректов: ‘allow_redirects’ => [ ‘track_redirects’ => true ]. В третьи, нужно прокинуть анонимную функцию с замыканием, которая запишет значение «эффективного» URL в замкнутую переменную. Всё вместе выглядит так:

$options = ['allow_redirects' => [
  'track_redirects' => true,
  'max' => 5,
  'strict' => true,
  ],
 'on_stats' => function(TransferStats $stats) use (&$final) {
  $final = $stats->getEffectiveUri();
}];

$res = $this->client->get($url, $options);
$response = $res->getBody()->getContents();

Финальная ссылка будет в переменной $final. Невероятно, но факт!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *