This is a simple wrapper for Laravel around guzzlehttp/guzzle
. It provides container bindings and a little helper function.
The idea was born by reading Always set a timeout for Guzzle requests inside a queued job by @themsaid.
Why limit it to the queue? At the end the problem applies to every curl request.
That's why this package comes with a default config which is applied to every guzzle instance build by this package.
You can install the package via composer:
composer require astrotomic/laravel-guzzle
After this you should publish the package config and adjust it to your needs.
php artisan vendor:publish --provider="Astrotomic\LaravelGuzzle\LaravelGuzzleServiceProvider" --tag=config
The core of this package is the \Astrotomic\LaravelGuzzle\Factory
which can handle multiple guzzle clients.
There's also a facade that forwards calls to the factory.
use Astrotomic\LaravelGuzzle\Facades\Guzzle;
use Psr\Http\Message\ResponseInterface;
/** @var ResponseInterface $response */
$response = Guzzle::client('jsonplaceholder')->get('posts/1');
$response->getStatusCode(); // 200
By default the default_client
config refers to a default
client.
The clients
config key holds all client specific configs.
For all possible request options please refer to the official guzzle docs.
There are multiple ways to register a new client - the easiest would be to simply add a new config to the clients
config key.
This will also be the most common for users using the package in a Laravel app.
If you want to configure your clients from within a service provider you can use the \Astrotomic\LaravelGuzzle\Factory::register()
method.
The registered config will be merged with an optional app config.
This will also come in handy for package developers who want to allow the fin al user to customize the guzzle config.
use Astrotomic\LaravelGuzzle\Facades\Guzzle;
use Illuminate\Support\ServiceProvider;
use GuzzleHttp\RequestOptions;
class HttpServiceProvider extends ServiceProvider
{
public function boot(): void
{
Guzzle::register('jsonplaceholder', [
'base_uri' => 'https://jsonplaceholder.typicode.com',
RequestOptions::TIMEOUT => 3,
]);
}
}
If you have the need to create a real GuzzleHttp\Client
instance yourself you can do so and assign it to an identifier.
This way you can also use a custom client class - the only requirement is that it extends the basic GuzzleHttp\Client
class.
use Astrotomic\LaravelGuzzle\Facades\Guzzle;
use GuzzleHttp\Client;
use Illuminate\Contracts\Container\Container;
Guzzle::extend('astrotomic', static function (Container $app, ?array $config): Client {
return new Client(array_merge([
'base_uri' => 'https://astrotomic.info',
], $config));
});
composer test
Please see CHANGELOG for more information what has changed recently.
Please see CONTRIBUTING for details. You could also be interested in CODE OF CONDUCT.
If you discover any security related issues, please check SECURITY for steps to report it.
The MIT License (MIT). Please see License File for more information.
You're free to use this package, but if it makes it to your production environment I would highly appreciate you buying the world a tree.
It’s now common knowledge that one of the best tools to tackle the climate crisis and keep our temperatures from rising above 1.5C is to plant trees. If you contribute to my forest you’ll be creating employment for local families and restoring wildlife habitats.
You can buy trees at offset.earth/treeware
Read more about Treeware at treeware.earth