Как избежать отправки запроса Guzzle после создания экземпляра?

Контекст: Laravel 5. Guzzle ~5.2. PHP 5.4. Я создаю класс для взаимодействия с внешним API. Я предоставляю этому классу клиент Guzzle с помощью поставщика услуг, чтобы избежать создания экземпляра клиента в методе.

Я хочу кэшировать результаты. Если пользователь запрашивает что-то, что находится в кеше, верните его вместо выполнения запроса к указанному API.

Проблема: если я создаю клиент Guzzle и не выполняю запрос, приложение падает. Нет даже трассировки стека из PHP. На самом деле, если я использую Laravel artisan serve, появляется сообщение об ошибке Windows, в котором говорится, что PHP CLI перестал работать.

На данный момент я передаю клиент Guzzle методу моего класса каждый раз, когда я его вызываю.

Есть ли способ просто создать экземпляр клиента Guzzle без отправки запроса? Какой другой путь вы бы выбрали для достижения этой цели? Это намеренное поведение?


person johnRivs    schedule 22.02.2015    source источник


Ответы (2)


тл; др РТМ

Более длинная версия (из документов):

Создание запросов Вы можете создать запрос, не отправляя его. Это полезно для создания запросов с течением времени или одновременной отправки запросов.

$request = $client->createRequest('GET', 'http://httpbin.org', [
    'headers' => ['X-Foo' => 'Bar']
]);

// Изменяем запрос по мере необходимости

$request->setHeader('Baz', 'bar');

После создания запроса вы можете отправить его с помощью клиентского метода send().

$response = $client->send($request);
person artiegold    schedule 30.06.2015
comment
это неправильно, не работает. У клиента нет функции createRequest - person Toskan; 12.02.2018

отсюда: http://docs.guzzlephp.org/en/stable/quickstart.html#making-a-request

    use GuzzleHttp\Psr7\Request;

$client = new Client([
    // Base URI is used with relative requests
    'base_uri' => 'http://httpbin.org',
    // You can set any number of default request options.
    'timeout'  => 2.0,
]);

    $request = new Request('PUT', 'http://httpbin.org/put');
    $response = $client->send($request, ['timeout' => 2]);
person Toskan    schedule 12.02.2018