mj4444 / simple-http-client
Simple Http Client
v0.2.0
2026-04-19 09:48 UTC
Requires
- php: ^8.2
Requires (Dev)
- ext-curl: *
- codeception/codeception: ^5.3
- codeception/module-asserts: *
- vimeo/psalm: ^6.16
README
This client makes complex HTTP requests easy.
It's useful for building API clients, various parsers, and handling complex multi-step request workflows.
Key Features
- The client, request, and response are fully abstract and interface-based.
- A set of ready-to-use classes simplifies working with any types of sent and received data.
- Tools for working with streaming data (upload, download).
- A dedicated client for JSON responses.
- Using your own implementations of request and response interfaces keeps your code organized.
Warning
Versions of this package earlier than "v1" may be incompatible. When connecting, please specify the exact package version to avoid automatic updates.
Installation
Via composer
composer require --prefer-dist mj4444/simple-http-client
By cloning the code
git clone https://github.com/mj4444ru/simple-http-client.git
Add the following lines to the composer.json file:
"autoload": {
"psr-4": {
"Mj4444\\SimpleHttpClient\\": "simple-http-client/src/"
}
}
Examples
Simple requests
Get request
use Mj4444\SimpleHttpClient\CurlHttpClient; use Mj4444\SimpleHttpClient\HttpRequest\HttpRequest; $client = new CurlHttpClient(); $request = new HttpRequest('http://www.google.com'); $response = $client->request($request); $responseHttpCode = $response->getHttpCode(); $responseUrl = $response->getUrl(); $responseEffectiveUrl = $response->getEffectiveUrl(); $responseContentType = $response->getContentType(); $responseBody = $response->getBody(); echo $responseHttpCode . PHP_EOL; echo $responseUrl . PHP_EOL; echo $responseEffectiveUrl . PHP_EOL; echo $responseContentType . PHP_EOL; echo PHP_EOL . $responseBody . PHP_EOL . PHP_EOL;
Get request with query
use Mj4444\SimpleHttpClient\HttpRequest\HttpRequest; $request = new HttpRequest('http://www.google.com/search?q=demo');
use Mj4444\SimpleHttpClient\HttpRequest\HttpRequest; $request = new HttpRequest('http://www.google.com/search', ['q' => 'demo']);
Post request
use Mj4444\SimpleHttpClient\HttpRequest\Body\MultipartBody\File; use Mj4444\SimpleHttpClient\HttpRequest\Body\MultipartBody\StringFile; use Mj4444\SimpleHttpClient\HttpRequest\HttpMethod; use Mj4444\SimpleHttpClient\HttpRequest\HttpRequest; $request = new HttpRequest('http://www.google.com', null, HttpMethod::Post); $request->setUrlencodedBody(['q' => 'demo']); $request->setMultipartFormBody([ 'field1' => 'value1', 'field2' => 2, 'field3' => new File($fileName, $postName, $mime), 'field4' => new StringFile($data, $postName, $mime), ]); $request->setJsonBody('demo'); $request->setStringBody(http_build_query(['q' => 'demo']), 'application/x-www-form-urlencoded'); $request->setNoBody(); $request->setFileBody(...); $request->setStreamBody(...); $request->setStringStreamBody(...);
JSON client
use Mj4444\SimpleHttpClient\CurlHttpClient; use Mj4444\SimpleHttpClient\HttpRequest\Body\NoBody; use Mj4444\SimpleHttpClient\HttpRequest\Body\UrlencodedBody; use Mj4444\SimpleHttpClient\JsonHttpClient; $client = new JsonHttpClient(new CurlHttpClient()); $data = $client->get('https://example.com', ['q' => 'demo']); $data = $client->post('https://example.com', ['body' => 'demo'], ['q' => 'demo']); $data = $client->post('https://example.com', new NoBody()); $data = $client->post('https://example.com', new UrlencodedBody([['q' => 'demo']]));
Extended request
use Mj4444\SimpleHttpClient\CurlHttpClient; use Mj4444\SimpleHttpClient\HttpRequest\HttpRequestEx; $client = new CurlHttpClient(); $fp = fopen('php://temp', 'rb+'); $request = new HttpRequestEx('https://google.com'); $request->setFollowLocation(true); $request->setResourceForResponseBody($fp); $progressCallback = static function ($bytesToDownload, $bytesDownloaded, $bytesToUpload, $bytesUploaded): bool { echo sprintf("%d / %d -- %d / %d\n", $bytesToDownload, $bytesDownloaded, $bytesToUpload, $bytesUploaded); return true; }; $request->setProgressCallback($progressCallback); $response = $client->request($request); $response->checkHttpCode(200);
Supported Body
- FileBody
- JsonBody
- MultipartFormBody
- NoBody
- StreamBody
- StringBody
- StringStreamBody
- UrlencodedBody
- Your Body Implementations
Run tests
vendor/bin/codecept run