如何避免在实例化后发送Guzzle请求?

时间:2015-02-22 04:56:07

标签: php laravel guzzle

背景: Laravel 5. Guzzle~5.2。 PHP 5.4。我正在构建一个与外部API交互的类。我使用服务提供程序为此类提供了一个Guzzle客户端,以避免在方法中实例化客户端。

我想缓存结果。如果用户要求在缓存中找到某些内容,则返回该内容而不是向所述API执行请求。

问题:如果我构建Guzzle客户端并且不执行请求,则应用程序崩溃。甚至没有来自PHP的堆栈跟踪。实际上,如果我使用Laravel的artisan serve,则会显示一条Windows错误消息,说明PHP CLI已停止工作。

现在,我每次都把Guzzle客户端传递给我班上的方法。

有没有办法在不发送请求的情况下实例化Guzzle客户端?您还会选择其他哪种方式来实现这一目标?这是预期的行为吗?

2 个答案:

答案 0 :(得分:1)

tl; Dr RTM

更长的版本(来自文档):

创建请求 您可以在不发送请求的情况下创建请求。这对于随时间建立请求或同时发送请求非常有用。

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

//根据需要修改请求

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

创建请求后,您可以使用客户端的send()方法发送请求。

$response = $client->send($request);

答案 1 :(得分:0)

从这里: 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]);