sofa / http-client
Factory wrapper around Guzzle HTTP Client to simplify things for lazy dev
Fund package maintenance!
jarektkaczyk
softonsofa.com
Installs: 79 012
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 2
Forks: 3
Open Issues: 1
Requires
- php: >=7.4
- ext-json: *
- guzzlehttp/guzzle: ^7.0
- psr/log: ^1|^2|^3
Requires (Dev)
- phpunit/phpunit: ^9.1
This package is auto-updated.
Last update: 2024-10-29 05:53:33 UTC
README
Wrapper around Guzzle HTTP Client to simplify bootstrapping
The simplest example in a Laravel app - ready to copy-paste and run
use Sofa\HttpClient\Factory; // register factory in IoC with default app logger app()->bind(Factory::class, fn () => new Factory(app()->environment('testing'), app('log')->driver())); // then inject or resolve wherever you need $httpClient = app(Factory::class) ->withOptions(['base_uri' => 'https://api.github.com']) ->enableRetries() ->enableLogging() ->make(); $httpClient->get('users/jarektkaczyk'); // et voila! Automatic retries in case of server errors and logging out of the box: [2020-05-22 12:38:32] local.INFO: GET https://api.github.com/users/jarektkaczyk HTTP/1.1 200 (1351 application/json; charset=utf-8) {"request": , "response": { "login": "jarektkaczyk", "blog": "https://softonsofa.com", "location": "Singapore", ... } }
Raw example with more customization:
// Raw example $logger = new Logger('HttpLogger'); $logger->pushHandler( new StreamHandler('/path/to/the/log/' . date('Y-m-d') . '.log')) ); $clientFactory = new Factory($fakeRequests, $logger); $httpClient = $clientFactory ->withOptions([ 'base_uri' => 'https://api.github.com', 'headers' => [ 'User-Agent' => 'My Awesome Client', ], ]) ->enableRetries($retries = 3, $delayInSec = 1, $minStatus = 500) ->enableLogging($customLogFormat) ->withMiddleware($customGuzzleMiddleware) ->make();
Testing
Guzzle on its own offers testing facilities but here we made it even easier.
Just so you don't have to worry about setting up custom testing clients or dropping if
s here and there:
$factory = new Factory(true, $logger); $httpClient = $factory->enableLogging()->make(); $httpClient->get('https://api.github.com/users/jarektkaczyk'); $httpClient->get('https://api.github.com/users/octokit'); $factory->getHistory($httpClient); => [ [ "request" => GuzzleHttp\Psr7\Request {#7218}, "response" => GuzzleHttp\Psr7\Response {#7225}, "error" => null, "options" => [ "synchronous" => true, "handler" => GuzzleHttp\HandlerStack {#7205}, "allow_redirects" => [ "max" => 5, "protocols" => [ "http", "https", ], "strict" => false, "referer" => false, "track_redirects" => false, ], "http_errors" => true, "decode_content" => true, "verify" => true, "cookies" => false, "idn_conversion" => true, ], ], ...