elfsundae/httpclient

A smart Guzzle wrapper provides convenient method chaining, global request options, and magic methods to customize request options.

2.2.0 2022-02-19 20:33 UTC

This package is auto-updated.

Last update: 2024-03-20 01:18:29 UTC


README

Latest Version on Packagist Software License tests StyleCI SymfonyInsight Grade Quality Score Code Coverage Total Downloads

HttpClient is a smart Guzzle wrapper provides convenient method chaining, global request options, and magic methods to customize request options.

Installation

$ composer require elfsundae/httpclient

Usage

use ElfSundae\HttpClient;

Fetching Response Content

$html = (new HttpClient)->fetchContent('http://httpbin.org');

$data = (new HttpClient)->fetchJson('https://httpbin.org/ip');

Making Requests

$client = HttpClient::create('https://httpbin.org')
    ->catchExceptions(true)
    ->httpErrors(false)
    ->auth(['user', 'passwd']);

$query = $client->query(['foo' => 'bar'])->getJson('/get');

$form = $client->formParams(['foo' => 'bar'])->postJson('/post');

$json = $client->json(['foo' => 'bar'])->putJson('/put');

$download = $client->saveTo('image.png')->get('/image/png');

$file = fopen('image.png', 'r');
$uploadBody = $client->body($file)->postJson('/post');

$multipart = [
    'foo' => 'bar',
    'file' => $file,
    'image' => [
        'contents' => fopen('image.png', 'r'),
        'filename' => 'filename.png',
    ],
];
$formData = $client->multipart($multipart)->postJson('/post');

Async Requests

$promise = $client->json($data)->getAsync('/get');

$promise = $client->formParams($data)->postAsync('/post');

Applying Request Options

Using the option method:

$client
    ->option('cert', $cert)
    ->option([
        'debug' => true,
        'headers.Content-Type' => 'application/json',
    ]);

Or using camelCase of any option name as a method on the client:

$client
    ->allowRedirects(false)
    ->timeout(20)
    ->cookies($cookieJar)
    ->headers([
        'X-Foo' => 'foo',
    ]);

In addition, you may use header, accept, acceptJson, userAgent or contentType to set request headers:

$client
    ->header('X-Foo', 'foo');
    ->header('X-Bar', 'bar');
    ->acceptJson()
    ->contentType('text/plain')
    ->userAgent('HttpClient/2.0')

Global Default Request Options

The static setDefaultOptions method can be used to configure default options for every new client instance:

HttpClient::setDefaultOptions([
    'catch_exceptions' => true,
    'http_errors' => false,
    'connect_timeout' => 5,
    'timeout' => 20,
    'headers.User-Agent' => 'HttpClient/2.0',
]);

Catching Guzzle Exceptions

The catchExceptions method determines whether to catch Guzzle exceptions or not.

$response = $client->catchExceptions(true)->get('/api/path');

try {
    $response = $client->catchExceptions(false)->get('/api/path');
} catch (Exception $e) {
    // ...
}

Testing

$ composer test

License

This package is open-sourced software licensed under the MIT License.