======================= Guzzle Cache Subscriber ======================= .. important:: **This repo has not been updated for Guzzle 6 and only supports Guzzle 5.** See https://github.com/Kevinrob/guzzle-cache-middleware for a nice Guzzle 6 compatible Cache middleware. Provides a private transparent proxy cache for caching HTTP responses. Here's a simple example of how it's used: .. code-block:: php use GuzzleHttp\Client; use GuzzleHttp\Subscriber\Cache\CacheSubscriber; $client = new Client(['defaults' => ['debug' => true]]); // Use the helper method to attach a cache to the client. CacheSubscriber::attach($client); // Send the first request $a = $client->get('http://en.wikipedia.org/wiki/Main_Page'); // Send the second request. This will find a cache hit which must be // validated. The validation request returns a 304, which yields the original // cached response. $b = $client->get('http://en.wikipedia.org/wiki/Main_Page'); Running the above code sample should output verbose cURL information that looks something like this: :: > GET /wiki/Main_Page HTTP/1.1 Host: en.wikipedia.org User-Agent: Guzzle/4.2.1 curl/7.37.0 PHP/5.5.13 Via: 1.1 GuzzleCache/4.2.1 < HTTP/1.1 200 OK < Server: Apache < X-Content-Type-Options: nosniff < Content-language: en < X-UA-Compatible: IE=Edge < Vary: Accept-Encoding,Cookie < Last-Modified: Thu, 21 Aug 2014 01:51:49 GMT < Content-Type: text/html; charset=UTF-8 < X-Varnish: 2345493325, 1998949714 1994269567 < Via: 1.1 varnish, 1.1 varnish < Transfer-Encoding: chunked < Date: Thu, 21 Aug 2014 02:34:12 GMT < Age: 2541 < Connection: keep-alive < X-Cache: cp1055 hit (1), cp1068 frontend hit (25353) < Cache-Control: private, s-maxage=0, max-age=0, must-revalidate < Set-Cookie: GeoIP=US:Seattle:47.6062:-122.3321:v4; Path=/; Domain=.wikipedia.org < * Connection #0 to host en.wikipedia.org left intact * Re-using existing connection! (#0) with host en.wikipedia.org > GET /wiki/Main_Page HTTP/1.1 Host: en.wikipedia.org User-Agent: Guzzle/4.2.1 curl/7.37.0 PHP/5.5.13 Via: 1.1 GuzzleCache/4.2.1, 1.1 GuzzleCache/4.2.1 If-Modified-Since: Thu, 21 Aug 2014 01:51:49 GMT < HTTP/1.1 304 Not Modified < Server: Apache < X-Content-Type-Options: nosniff < Content-language: en < X-UA-Compatible: IE=Edge < Vary: Accept-Encoding,Cookie < Last-Modified: Thu, 21 Aug 2014 01:51:49 GMT < Content-Type: text/html; charset=UTF-8 < X-Varnish: 2345493325, 1998950450 1994269567 < Via: 1.1 varnish, 1.1 varnish < Date: Thu, 21 Aug 2014 02:34:12 GMT < Age: 2541 < Connection: keep-alive < X-Cache: cp1055 hit (1), cp1068 frontend hit (25360) < Cache-Control: private, s-maxage=0, max-age=0, must-revalidate < Set-Cookie: GeoIP=US:Seattle:47.6062:-122.3321:v4; Path=/; Domain=.wikipedia.org < * Connection #0 to host en.wikipedia.org left intact Installing ---------- Add the following to your composer.json: .. code-block:: javascript { "require": { "guzzlehttp/cache-subscriber": "0.2.*@dev" } } or .. code-block:: console $ composer require guzzlehttp/cache-subscriber Creating a CacheSubscriber -------------------------- The easiest way to create a CacheSubscriber is using the ``attach()`` helper method of ``GuzzleHttp\Subscriber\Cache\CacheSubscriber``. This method accepts a request or client object and attaches the necessary subscribers used to perform cache lookups, validation requests, and automatic purging of resources. The ``attach()`` method accepts the following options: storage A ``GuzzleHttp\Subscriber\Cache\CacheStorageInterface`` object used to store cached responses. If no value is not provided, an in-memory array cache will be used. validate A Boolean value that determines if cached response are ever validated against the origin server. This setting defaults to ``true`` but can be disabled by passing ``false``. purge A Boolean value that determines if cached responses are purged when non-idempotent requests are sent to their URI. This setting defaults to ``true`` but can be disabled by passing ``false``. can_cache An optional callable used to determine if a request can be cached. The callable accepts a ``GuzzleHttp\Message\RequestInterface`` and returns a Boolean value. If no value is provided, the default behavior is utilized. .. warning:: This is a WIP update for Guzzle 5+. It hasn't been tested and is in active development. Expect bugs and breaks.