@Hecktosaurus
Люблю писать код под специфические задачи

GUZZLE 7. Как узнать url запроса в случае ошибки?

Здравствуйте! Посылаю несколько параллельных запросов через Guzzle. Подскажите, пожалуйста, как получить url запроса при успехе/ошибке?

<?php

// создаём клиент
$client = new Client([
    'http_errors'     => false,
    'connect_timeout' => 0.00,
    'timeout'         => 0.00,
    'headers' => [
        'User-Agent' => 'Test/1.0'
    ],
]);

// храним здесь промисы
$promises = array();

$domains = array(
    'toster' => 'https://toster.ru',
    'example' => 'https://awesomesiteyousaw.com',
    'qna.habr.com' => 'https://qna.habr.com'
);

// обходим каждый элемент
foreach($domains as $id => $url){

    $promises[$id] = $client->getAsync($url);

    $promises[$id]->then(
        function (ResponseInterface $res) {
            $tempVerdict = $res->getStatusCode(); // здесь хотелось бы получить url, по которому пытались достучаться
        },
        function ($e) {
            $tempVerdict = $e->getMessage(); // и здесь тоже
        }
    );
}

// ждём выполнения промисов
$part_responses = Promise\Utils::settle($promises)->wait();
  • Вопрос задан
  • 187 просмотров
Решения вопроса 1
@Dark_Dante
С версии 6.1 через замыкание
$client->get('http://some.site.com', [
    'query'   => ['get' => 'params'],
    'on_stats' => function (TransferStats $stats) use (&$url) {
        $url = $stats->getEffectiveUri();
    }
])->getBody()->getContents();

echo $url; // http://some.site.com?get=params


Можно еще так
var_dump($response->getHeader(\GuzzleHttp\RedirectMiddleware::HISTORY_HEADER));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы