nelexa/http-client-simple-cache

Guzzle-based HTTP Client with the ability to customize caching of the processed HTTP request results (not based on HTTP headers).

Maintainers

👁 Ne-Lexa

Package info

github.com/Ne-Lexa/http-client-simple-cache

pkg:composer/nelexa/http-client-simple-cache

Statistics

Installs: 7 886

Dependents: 0

Suggesters: 0

Stars: 1

Open Issues: 0

1.1.1 2021-02-25 20:03 UTC

Requires

Requires (Dev)

Suggests

  • symfony/cache: Install the implementation of the simple cache PSR-16. Full list of packages https://packagist.org/providers/psr/simple-cache-implementation

Provides

None

Conflicts

None

Replaces

None

MIT 6fb7999d0c72c454194439759d0b40f6f64abdce

  • Ne-Lexa <alexey.woop@nelexa.ru>

This package is auto-updated.

Last update: 2026-06-26 08:12:27 UTC


README

Guzzle-based HTTP Client with the ability to customize caching of the processed HTTP request results (not based on HTTP headers).

👁 Packagist Version
👁 PHP from Packagist
👁 License

👁 Build Status
👁 Scrutinizer build
👁 Scrutinizer code quality
👁 Scrutinizer coverage

Documentation

Guzzle docs: http://docs.guzzlephp.org/en/stable/

Init

<?php

$client = new \Nelexa\HttpClient\HttpClient();

Set default options:

<?php

$client = new \Nelexa\HttpClient\HttpClient([
 \Nelexa\HttpClient\Options::HEADERS => [
 'User-Agent' => 'TestHttpClient/1.0',
 ],
]);

Processing an HTTP request and getting the result

<?php

$client = new \Nelexa\HttpClient\HttpClient();
$result = $client->get($url, [
 \Nelexa\HttpClient\Options::HANDLER_RESPONSE => $callable
]);

Callable signature:

function(\Psr\Http\Message\RequestInterface $request, \Psr\Http\Message\ResponseInterface $response){
 return ...;
}

Example:

<?php

$client = new \Nelexa\HttpClient\HttpClient();

// use \Closure handler

$base64Contents = $client->get($url, [
 \Nelexa\HttpClient\Options::HANDLER_RESPONSE => static function (Psr\Http\Message\RequestInterface $request, Psr\Http\Message\ResponseInterface $response) {
 return base64_encode($response->getBody()->getContents());
 },
]);

// or use class handler

$base64Contents = $client->get($url, [
 \Nelexa\HttpClient\Options::HANDLER_RESPONSE => new class() implements \Nelexa\HttpClient\ResponseHandlerInterface {
 
 public function __invoke(Psr\Http\Message\RequestInterface $request, Psr\Http\Message\ResponseInterface $response)
 {
 return base64_encode($response->getBody()->getContents());
 }
 },
]);

Use cache results

Install the implementation of the simple cache PSR-16.

Full list of packages https://packagist.org/providers/psr/simple-cache-implementation

Example install:

composer require symfony/cache

Add option \Nelexa\HttpClient\Options::CACHE_TTL with \DateInterval value.

Example:

<?php

class Api
{
 /** @var \Nelexa\HttpClient\HttpClient */
 private $httpClient;

 public function __construct(Psr\SimpleCache\CacheInterface $cache)
 {
 $this->httpClient = new \Nelexa\HttpClient\HttpClient([], $cache);
 }

 /**
 * Fetch uuid.
 *
 * @return string
 */
 public function fetchUUID(): string
 {
 return $this->httpClient->request('GET', 'https://httpbin.org/uuid', [
 
 \Nelexa\HttpClient\Options::CACHE_TTL => \DateInterval::createFromDateString('1 min'), // required TTL
 
 \Nelexa\HttpClient\Options::HANDLER_RESPONSE => static function (Psr\Http\Message\RequestInterface $request, Psr\Http\Message\ResponseInterface $response) {
 $contents = $response->getBody()->getContents();
 $json = \GuzzleHttp\json_decode($contents, true);

 return $json['uuid'];
 },
 ]);
 }
}

$cache = new \Symfony\Component\Cache\Psr16Cache(
 new \Symfony\Component\Cache\Adapter\RedisAdapter(
 \Symfony\Component\Cache\Adapter\RedisAdapter::createConnection('redis://localhost')
 )
);

$api = new Api($cache);
$UUID = $api->fetchUUID();

\PHPUnit\Framework\Assert::assertSame($api->fetchUUID(), $UUID);

var_dump($UUID); // string(36) "a72b27c2-7e69-4bc8-8d5b-ccb0e496a7bf"

Async Request Pool Handler

<?php

$urls = [
 'jpeg' => 'https://httpbin.org/image/jpeg',
 'png' => 'https://httpbin.org/image/png',
 'webp' => 'https://httpbin.org/image/webp',
];

$client = new \Nelexa\HttpClient\HttpClient();
$result = $client->requestAsyncPool('GET', $urls, [
 \Nelexa\HttpClient\Options::HANDLER_RESPONSE => static function (Psr\Http\Message\RequestInterface $request, Psr\Http\Message\ResponseInterface $response) {
 return getimagesizefromstring($response->getBody()->getContents());
 },
], $concurrency = 2);

print_r($result);

// Output:
//
//Array
//(
// [png] => Array
// (
// [0] => 100
// [1] => 100
// [2] => 3
// [3] => width="100" height="100"
// [bits] => 8
// [mime] => image/png
// )
//
// [webp] => Array
// (
// [0] => 274
// [1] => 367
// [2] => 18
// [3] => width="274" height="367"
// [bits] => 8
// [mime] => image/webp
// )
//
// [jpeg] => Array
// (
// [0] => 239
// [1] => 178
// [2] => 2
// [3] => width="239" height="178"
// [bits] => 8
// [channels] => 3
// [mime] => image/jpeg
// )
//)

Changelog

Changes are documented in the releases page.

License

The files in this archive are released under the MIT License.

You can find a copy of this license in LICENSE file.