Signatur
Beschreibung
Swoole\Http\Client ist ein hochperformanter HTTP-Client, der speziell für den Einsatz in Swoole-Koroutinen konzipiert wurde. Im Gegensatz zu klassischen PHP-HTTP-Clients (cURL, file_get_contents) blockiert er den PHP-Prozess nicht, sondern gibt die Kontrolle an den Koroutinen-Scheduler zurück, während auf die Antwort des Servers gewartet wird. Dadurch können tausende parallele HTTP-Anfragen mit sehr geringem Ressourcenverbrauch abgewickelt werden.
Der Client unterstützt HTTP/1.1, Keep-Alive, Cookies, Datei-Uploads, WebSockets sowie HTTPS über SSL/TLS. Methoden wie get(), post() und execute() sind koroutinenfreundlich: Sie sehen synchron aus, sind aber intern nicht-blockierend.
Der Client eignet sich ideal für Microservice-Architekturen, API-Aggregatoren oder Web-Scraper, bei denen viele externe HTTP-Aufrufe gleichzeitig und effizient ausgeführt werden müssen. Er wird typischerweise innerhalb eines Swoole\Coroutine\run()-Blocks oder eines Swoole-Servers verwendet.
Achtung: Der Client ist nicht thread-safe und darf nicht über mehrere Koroutinen hinweg gemeinsam genutzt werden. Jede Koroutine sollte eine eigene Client-Instanz verwenden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $host Pflicht | string | Hostname oder IP-Adresse des Zielservers, z. B. 'api.example.com' oder '127.0.0.1'. |
|
| $port | int | 80 | Port des Zielservers. Standard: 80 für HTTP, 443 für HTTPS. |
| $ssl | bool | false | Wenn true, wird eine SSL/TLS-verschlüsselte Verbindung (HTTPS) verwendet. |
Beispiele
Einfacher GET-Request in einer Koroutine
<?php
use Swoole\Coroutine;
use Swoole\Http\Client;
Coroutine\run(function () {
$client = new Client('httpbin.org', 443, true);
$client->setHeaders([
'User-Agent' => 'SwooleClient/1.0',
'Accept' => 'application/json',
]);
$client->get('/get?foo=bar');
if ($client->statusCode === 200) {
$data = json_decode($client->body, true);
echo 'Status: ' . $client->statusCode . PHP_EOL;
echo 'URL: ' . $data['url'] . PHP_EOL;
} else {
echo 'Fehler: ' . $client->errCode . ' - ' . $client->errMsg . PHP_EOL;
}
$client->close();
});
POST-Request mit JSON-Body
<?php
use Swoole\Coroutine;
use Swoole\Http\Client;
Coroutine\run(function () {
$client = new Client('httpbin.org', 443, true);
$client->setHeaders([
'Content-Type' => 'application/json',
]);
$payload = json_encode(['name' => 'Max', 'age' => 30]);
$client->setData($payload);
$client->post('/post');
echo 'HTTP-Status: ' . $client->statusCode . PHP_EOL;
$response = json_decode($client->body, true);
echo 'Empfangene Daten: ' . $response['data'] . PHP_EOL;
$client->close();
});
Parallele HTTP-Anfragen mit Coroutine\WaitGroup
<?php
use Swoole\Coroutine;
use Swoole\Coroutine\WaitGroup;
use Swoole\Http\Client;
Coroutine\run(function () {
$wg = new WaitGroup();
$results = [];
$urls = ['/get?id=1', '/get?id=2', '/get?id=3'];
foreach ($urls as $path) {
$wg->add();
Coroutine::create(function () use ($path, &$results, $wg) {
$client = new Client('httpbin.org', 443, true);
$client->get($path);
$results[$path] = $client->statusCode;
$client->close();
$wg->done();
});
}
$wg->wait();
foreach ($results as $path => $status) {
echo $path . ' => HTTP ' . $status . PHP_EOL;
}
});
// Wichtig · Fallstricke
Wichtige Eigenschaften nach einer Anfrage:
$client->statusCode— HTTP-Statuscode (z. B.200,404). Bei Verbindungsfehlern ist der Wert negativ.$client->body— Antwort-Body als String.$client->headers— Assoziatives Array mit den Antwort-Headern.$client->errCodeund$client->errMsg— Fehlercode und -meldung bei Verbindungsproblemen.
Sicherheitshinweis: Bei HTTPS-Verbindungen wird die SSL-Zertifikatsüberprüfung standardmäßig aktiviert. Deaktivieren Sie diese nicht leichtfertig mit ssl_verify_peer => false, da dies Man-in-the-Middle-Angriffe ermöglicht.
Nur in Koroutinen-Kontext: Dieser Client funktioniert ausschließlich innerhalb von Swoole-Koroutinen korrekt (also in Coroutine\run() oder innerhalb eines Swoole-Servers). Außerhalb eines Koroutinen-Kontexts blockiert er den gesamten Prozess.
Ab Swoole 4.x steht als modernere Alternative Swoole\Coroutine\Http\Client zur Verfügung, der denselben Funktionsumfang bietet, aber dem aktuelleren Namespace-Stil folgt.