thlib / php-curl-client
A very simple and lightweight cURL helper for PHP
1.0.0
2020-04-10 18:22 UTC
Requires
- php: >=5.3.0
- psr/http-message: ^1.0
- slim/psr7: ^1.0
- thlib/php-constants: ^1.0
- thlib/php-curl-multi-basic: ^1.0
- thlib/php-url: ^1.0
This package is auto-updated.
Last update: 2025-04-18 22:38:11 UTC
README
Problems solved:
- Guzzle is huge and complicated.
- As functionality is added, the files become larger for everyone.
Solutions:
- Custom cURL abstraction.
- Classes don't grow, instead new classes are added for each new bit of functionality.
Follows PSR-7
Example usage:
<?php require 'vendor/autoload.php'; header('Content-Type: text/plain;charset=utf-8'); use TH\HttpConstants\ContentType; use TH\HttpConstants\HttpRequestHeader; use TH\CurlClient\CurlMulti; use TH\CurlClient\CurlClient; use TH\CurlClient\CurlResponse; use TH\CurlClient\Request\Authorization; use TH\CurlClient\Request\Headers; use TH\CurlClient\Request\Json; use TH\CurlClient\Request\QueryParams; // Sync request echo 'Sync request'.PHP_EOL; echo '================================='.PHP_EOL; $response = CurlClient::post('https://example.com') ->with(new Json(['key'=>'value'])) ->with(new QueryParams(['test' => 1])) ->with(new Authorization('Bearer: abc')) ->with(new Headers(['X-Test: test'])) ->send(); $status = $response->getStatusCode(); $body = $response->getBody()->__toString(); echo 'StatusCode: '.$status.PHP_EOL; foreach($response->getHeaders() as $name => $headers) { foreach($headers as $value){ echo $name.': '.$value.PHP_EOL; } } echo PHP_EOL.$body.PHP_EOL; // Async request echo PHP_EOL; echo PHP_EOL; echo 'Async request'.PHP_EOL; echo '================================='.PHP_EOL; $request = CurlClient::get('https://google.com') ->with(new Json(['key'=>'value'])) ->with(new QueryParams(['test' => 1])) ->with(new Authorization('Bearer: abc')); $multi = new CurlMulti; $multi = $multi->add($request, function(CurlResponse $response){ $status = $response->getStatusCode(); $body = $response->getBody()->__toString(); echo 'StatusCode: '.$status.PHP_EOL; foreach($response->getHeaders() as $name => $headers) { foreach($headers as $value){ echo $name.': '.$value.PHP_EOL; } } echo PHP_EOL.$body.PHP_EOL; }); $multi->send(); // Use built-in helper functions $response = CurlClient::post('https://example.com') ->withJson(['key'=>'value']) ->withQueryParams(['test' => 1]); // Call it as an instance $client = new CurlClient; $request = $client->post('https://example.com'); $request = $request->with(new Authorization('Bearer: abc')); /** @var CurlResponse $response PSR-7 Response with extra methods that are specific to curl */ $response = $request->send();
To run tests
vendor/phpunit/phpunit/phpunit --bootstrap vendor/autoload.php tests