PHP code example of monkeyscloud / monkeyslegion-http-client

1. Go to this page and download the library: Download monkeyscloud/monkeyslegion-http-client library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

monkeyscloud / monkeyslegion-http-client example snippets


use MonkeysLegion\HttpClient\HttpClient;
use MonkeysLegion\HttpClient\DTO\ClientConfig;

$client = new HttpClient(new ClientConfig(
    baseUrl: 'https://api.example.com',
    timeout: 15,
));

// GET with query params
$response = $client->get('/users', query: ['page' => '1', 'limit' => '25']);
$users = $response->json();

// POST with JSON body
$response = $client->post('/users', json: [
    'name'  => 'Jorge',
    'email' => '[email protected]',
]);

// Fluent builder
$response = $client
    ->withToken($apiToken)
    ->withHeader('X-Request-Id', uniqid())
    ->timeout(5)
    ->post('/orders', ['product_id' => 42, 'qty' => 1]);

// Response helpers
$response->statusCode;    // 201
$response->isOk;          // true
$response->json();        // ['id' => 1, 'name' => 'Jorge']
$response->get('id');     // 1
$response->header('X-RateLimit-Remaining'); // "42"
$response->duration;      // 0.234 (seconds)

use MonkeysLegion\HttpClient\Middleware\RetryMiddleware;
use MonkeysLegion\HttpClient\Retry\RetryPolicy;
use MonkeysLegion\HttpClient\Enum\BackoffStrategy;
use MonkeysLegion\HttpClient\Pipeline\MiddlewarePipeline;
use MonkeysLegion\HttpClient\Transport\CurlTransport;

$transport = new MiddlewarePipeline(new CurlTransport());
$transport->pipe(new RetryMiddleware(new RetryPolicy(
    maxAttempts: 3,
    backoff: BackoffStrategy::ExponentialJitter,
    baseDelayMs: 100,
    maxDelayMs: 5000,
    retryableStatusCodes: [429, 500, 502, 503, 504],
)));

$client = new HttpClient(transport: $transport);

use MonkeysLegion\HttpClient\Middleware\AuthMiddleware;

// Bearer token
$transport->pipe(AuthMiddleware::bearer($token));

// Basic auth
$transport->pipe(AuthMiddleware::basic('user', 'pass'));

// API key header
$transport->pipe(AuthMiddleware::apiKey('sk_live_xxx', 'X-API-Key'));

// Custom callback
$transport->pipe(AuthMiddleware::custom(fn($req) =>
    $req->withHeaders(['X-Signature' => hmac($req->body)])
));

use MonkeysLegion\HttpClient\Middleware\LoggingMiddleware;

$transport->pipe(new LoggingMiddleware(
    logger: $psrLogger,
    level: 'debug',
    bodyLimit: 1024, // truncate bodies > 1KB
));
// Automatically redacts Authorization, Cookie, X-API-Key headers

use MonkeysLegion\HttpClient\Middleware\RateLimitMiddleware;

$transport->pipe(new RateLimitMiddleware(maxPerSecond: 10));
// Per-domain token bucket

use MonkeysLegion\HttpClient\Middleware\TimeoutMiddleware;

$transport->pipe(new TimeoutMiddleware(timeout: 30, connectTimeout: 5));

use MonkeysLegion\HttpClient\Bridge\PsrClientAdapter;

$psrClient = new PsrClientAdapter($httpClient);
$psrResponse = $psrClient->sendRequest($psrRequest);
// Works as drop-in for any PSR-18 consumer (Stripe, AWS SDK, etc.)

use MonkeysLegion\HttpClient\Bridge\PsrTransportAdapter;
use GuzzleHttp\Client as GuzzleClient;
use GuzzleHttp\Psr7\HttpFactory;

$guzzle = new GuzzleClient();
$factory = new HttpFactory();
$transport = new PsrTransportAdapter($guzzle, $factory, $factory);

$client = new HttpClient(transport: $transport);

use MonkeysLegion\HttpClient\Async\Pool;
use MonkeysLegion\HttpClient\DTO\RequestContext;
use MonkeysLegion\HttpClient\Enum\HttpMethod;

$requests = [
    new RequestContext(HttpMethod::GET, 'https://api.example.com/users/1'),
    new RequestContext(HttpMethod::GET, 'https://api.example.com/users/2'),
    new RequestContext(HttpMethod::GET, 'https://api.example.com/users/3'),
];

$responses = Pool::send($transport, $requests, concurrency: 5);
// Returns list<HttpResponse> in same order as requests

use MonkeysLegion\HttpClient\Transport\MockTransport;
use MonkeysLegion\HttpClient\HttpClient;

$mock = new MockTransport();
$mock->enqueueJson(['id' => 1, 'name' => 'Test'], statusCode: 201);

$client = new HttpClient(transport: $mock);
$response = $client->post('/users', json: ['name' => 'Test']);

assert($response->statusCode === 201);
assert($response->get('name') === 'Test');
assert($mock->requestCount() === 1);
assert($mock->assertSent('/users'));

$response->statusCode;     // int
$response->body;           // string (raw)
$response->headers;        // array<string, string>
$response->duration;       // float (seconds)
$response->isOk;           // 2xx
$response->isRedirect;     // 3xx
$response->isClientError;  // 4xx
$response->isServerError;  // 5xx
$response->isFailed;       // 4xx or 5xx
$response->json();         // array<string, mixed>
$response->get('key');     // dot-notation access
$response->header('name'); // case-insensitive header lookup
$response->toArray();      // full response as array
bash
php ml http-client:install