mini\Http\Client namespace

Http Client - PSR-18 HTTP Client

A lightweight PSR-18 compliant HTTP client built on curl.

Usage

use mini\Http\Client\HttpClient;

$client = new HttpClient();

// Simple GET
$response = $client->get('https://api.example.com/users');
echo $response->getStatusCode();  // 200
echo $response->getBody();        // {"users": [...]}

// POST with form data
$response = $client->post('https://api.example.com/users', [
    'name' => 'John',
    'email' => 'john@example.com',
]);

// POST with JSON
$response = $client->postJson('https://api.example.com/users', [
    'name' => 'John',
    'email' => 'john@example.com',
]);

// Custom headers
$response = $client->get('https://api.example.com/users', [
    'Authorization' => 'Bearer token123',
    'Accept' => 'application/json',
]);

// All HTTP methods
$client->get($url);
$client->post($url, $data);
$client->postJson($url, $data);
$client->put($url, $data);
$client->putJson($url, $data);
$client->patch($url, $data);
$client->patchJson($url, $data);
$client->delete($url);
$client->head($url);
$client->request($method, $url, $body, $headers);

PSR-18 Interface

For library interoperability, use the PSR-18 sendRequest() method:

use mini\Http\Message\Request;
use Psr\Http\Client\ClientInterface;

function fetchData(ClientInterface $client): array
{
    $request = new Request('GET', 'https://api.example.com/data');
    $response = $client->sendRequest($request);
    return json_decode((string) $response->getBody(), true);
}

$client = new HttpClient();
$data = fetchData($client);

Configuration

$client = new HttpClient([
    'timeout' => 30,           // Request timeout in seconds
    'connect_timeout' => 10,   // Connection timeout in seconds
    'verify_ssl' => true,      // Verify SSL certificates
    'follow_redirects' => true,// Follow 3xx redirects
    'max_redirects' => 5,      // Maximum redirects to follow
    'user_agent' => 'MyApp/1.0',
    'headers' => [             // Default headers for all requests
        'Accept' => 'application/json',
    ],
]);

Error Handling

The client follows PSR-18 semantics:

  • 4xx/5xx responses do NOT throw - check $response->getStatusCode()
  • Network errors throw NetworkException - DNS, connection, timeout
  • Malformed requests throw RequestException
use mini\Http\Client\NetworkException;
use mini\Http\Client\RequestException;

try {
    $response = $client->get('https://api.example.com/users');

    if ($response->getStatusCode() >= 400) {
        // Handle HTTP error
        echo "Error: " . $response->getStatusCode();
    }
} catch (NetworkException $e) {
    // Network error (DNS, timeout, connection refused)
    echo "Network error: " . $e->getMessage();
} catch (RequestException $e) {
    // Malformed request
    echo "Request error: " . $e->getMessage();
}

Requirements

  • PHP 8.3+
  • ext-curl

Classes (4)

ClientException

Base exception for HTTP client errors

HttpClient

PSR-18 compliant HTTP client built on curl

NetworkException

Exception thrown for network errors (DNS, connection, timeout)

RequestException

Exception thrown for malformed requests