Description
workerman a renforcé le support des services HTTP à partir de la version 4.x. Il a introduit les classes de requête, de réponse, de session et SSE. Si vous souhaitez utiliser le service HTTP de workerman, il est fortement recommandé d'utiliser workerman 4.x ou une version ultérieure.
Attention, toutes les méthodes suivantes sont pour la version workerman 4.x, non compatibles avec workerman 3.x.
Obtenir l'objet de requête
L'objet de requête est toujours obtenu dans la fonction de rappel onMessage, le framework passe automatiquement l'objet Request en tant que deuxième paramètre de la fonction de rappel.
Exemple
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
// $request est l'objet de requête, ici nous ne faisons aucune opération sur l'objet de requête, nous renvoyons directement hello au navigateur
$connection->send("hello");
};
// Lancer le worker
Worker::runAll();
Lorsque le navigateur accède à http://127.0.0.1:8080, il renverra hello.
Obtenir les paramètres de requête GET
Obtenir le tableau complet GET
$get = $request->get();
Si la requête n'a pas de paramètres GET, cela renvoie un tableau vide.
Obtenir une valeur du tableau GET
$name = $request->get('name');
Si cette valeur n'est pas dans le tableau GET, cela renvoie null.
Vous pouvez également passer une valeur par défaut en second paramètre de la méthode get, si la valeur correspondante n'est pas trouvée dans le tableau GET, cela renverra la valeur par défaut. Par exemple :
$name = $request->get('name', 'tom');
Exemple
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$connection->send($request->get('name'));
};
// Lancer le worker
Worker::runAll();
Lorsque le navigateur accède à http://127.0.0.1:8080?name=jerry&age=12, il renverra jerry.
Obtenir les paramètres de requête POST
Obtenir le tableau complet POST
$post = $request->post();
Si la requête n'a pas de paramètres POST, cela renvoie un tableau vide.
Obtenir une valeur du tableau POST
$name = $request->post('name');
Si cette valeur n'est pas dans le tableau POST, cela renvoie null.
Comme pour la méthode get, vous pouvez aussi passer une valeur par défaut en second paramètre de la méthode post, si la valeur correspondante n'est pas trouvée dans le tableau POST, cela renverra la valeur par défaut. Par exemple :
$name = $request->post('name', 'tom');
Exemple
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$post = $request->post();
$connection->send(var_export($post, true));
};
// Lancer le worker
Worker::runAll();
Obtenir le corps brut de la requête POST
$post = $request->rawBody();
Cette fonctionnalité est similaire à l'opération file_get_contents("php://input"); dans php-fpm. Elle permet d'obtenir le corps brut de la requête HTTP. Ceci est utile pour récupérer des données de requêtes POST dans un format autre que application/x-www-form-urlencoded.
Exemple
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$post = json_decode($request->rawBody());
$connection->send('hello');
};
// Lancer le worker
Worker::runAll();
Obtenir les en-têtes
Obtenir le tableau complet des en-têtes
$headers = $request->header();
Si la requête n'a pas d'en-têtes, cela renvoie un tableau vide. Notez que toutes les clés sont en minuscules.
Obtenir une valeur d'un tableau d'en-têtes
$host = $request->header('host');
Si cette valeur n'est pas dans le tableau des en-têtes, cela renvoie null. Notez que toutes les clés sont en minuscules.
Comme pour la méthode get, vous pouvez aussi passer une valeur par défaut en second paramètre de la méthode header, si la valeur correspondante n'est pas trouvée dans le tableau d'en-têtes, cela renverra la valeur par défaut. Par exemple :
$host = $request->header('host', 'localhost');
Exemple
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
if ($request->header('connection') === 'keep-alive') {
$connection->send('hello');
} else {
$connection->close('hello');
}
};
// Lancer le worker
Worker::runAll();
Obtenir les cookies
Obtenir le tableau complet des cookies
$cookies = $request->cookie();
Si la requête n'a pas de cookies, cela renvoie un tableau vide.
Obtenir une valeur d'un tableau de cookies
$name = $request->cookie('name');
Si cette valeur n'est pas dans le tableau des cookies, cela renvoie null.
Comme pour la méthode get, vous pouvez aussi passer une valeur par défaut en second paramètre de la méthode cookie, si la valeur correspondante n'est pas trouvée dans le tableau des cookies, cela renverra la valeur par défaut. Par exemple :
$name = $request->cookie('name', 'tom');
Exemple
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$cookie = $request->cookie();
$connection->send(var_export($cookie, true));
};
// Lancer le worker
Worker::runAll();
Obtenir les fichiers uploadés
Obtenir le tableau complet des fichiers uploadés
$files = $request->file();
Le format des fichiers retournés est similaire à :
array (
'avatar' => array (
'name' => '123.jpg',
'tmp_name' => '/tmp/workerman.upload.9hjR4w',
'size' => 1196127,
'error' => 0,
'type' => 'application/octet-stream',
),
'anotherfile' => array (
'name' => '456.txt',
'tmp_name' => '/tmp/workerman.upload.9sirSws',
'size' => 490,
'error' => 0,
'type' => 'text/plain',
)
)
où :
- name est le nom du fichier
- tmp_name est l'emplacement du fichier temporaire sur le disque
- size est la taille du fichier
- error est le code d'erreur
- type est le type mine du fichier.
Attention :
-
La taille des fichiers uploadés est soumise à la limite de defaultMaxPackageSize, qui est de 10 Mo par défaut, et peut être modifiée.
-
Les fichiers seront automatiquement supprimés à la fin de la requête.
-
Si la requête n'a pas de fichiers uploadés, cela renvoie un tableau vide.
Obtenir un fichier uploadé spécifique
$avatar_file = $request->file('avatar');
Cela renvoie quelque chose comme :
array (
'name' => '123.jpg',
'tmp_name' => '/tmp/workerman.upload.9hjR4w',
'size' => 1196127,
'error' => 0,
'type' => 'application/octet-stream',
)
Si le fichier uploadé n'existe pas, cela renvoie null.
Exemple
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$file = $request->file('avatar');
if ($file && $file['error'] === UPLOAD_ERR_OK) {
rename($file['tmp_name'], '/home/www/web/public/123.jpg');
$connection->send('ok');
return;
}
$connection->send('upload fail');
};
// Lancer le worker
Worker::runAll();
Obtenir l'hôte
Obtenir les informations de l'hôte de la requête.
$host = $request->host();
Si l'adresse de la requête est sur un port non standard comme 80 ou 443, les informations de l'hôte peuvent inclure le port, par exemple example.com:8080. Si le port n'est pas nécessaire, le premier paramètre peut être true.
$host = $request->host(true);
Exemple
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$connection->send($request->host());
};
// Lancer le worker
Worker::runAll();
Lorsque le navigateur accède à http://127.0.0.1:8080?name=tom, il renverra 127.0.0.1:8080.
Obtenir la méthode de requête
$method = $request->method();
La valeur de retour peut être GET, POST, PUT, DELETE, OPTIONS, ou HEAD.
Exemple
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$connection->send($request->method());
};
// Lancer le worker
Worker::runAll();
Obtenir l'URI de la requête
$uri = $request->uri();
Retourne l'URI de la requête, y compris la partie chemin et la chaîne de requête.
Exemple
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$connection->send($request->uri());
};
// Lancer le worker
Worker::runAll();
Lorsque le navigateur accède à http://127.0.0.1:8080/user/get.php?uid=10&type=2, cela renverra /user/get.php?uid=10&type=2.
Obtenir le chemin de la requête
$path = $request->path();
Retourne la partie chemin de la requête.
Exemple
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$connection->send($request->path());
};
// Lancer le worker
Worker::runAll();
Lorsque le navigateur accède à http://127.0.0.1:8080/user/get.php?uid=10&type=2, cela renverra /user/get.php.
Obtenir la chaîne de requête de la requête
$query_string = $request->queryString();
Retourne la partie chaîne de requête de la requête.
Exemple
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$connection->send($request->queryString());
};
// Lancer le worker
Worker::runAll();
Lorsque le navigateur accède à http://127.0.0.1:8080/user/get.php?uid=10&type=2, cela renverra uid=10&type=2.
Obtenir la version HTTP de la requête
$version = $request->protocolVersion();
Renvoie la chaîne 1.1 ou 1.0.
Exemple
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$connection->send($request->protocolVersion());
};
// Lancer le worker
Worker::runAll();
Obtenir l'ID de session de requête
$sid = $request->sessionId();
Renvoie une chaîne composée de lettres et de chiffres.
Exemple
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8080');
$worker->onMessage = function(TcpConnection $connection, Request $request)
{
$connection->send($request->sessionId());
};
// Lancer le worker
Worker::runAll();