Programmation PHP avec Symfony/HttpClient
Installation
Composant pour lancer des requêtes HTTP depuis l'application, avec gestion des timeouts, redirections, cache, protocole et en-tête HTTP. Il est configurable en PHP ou dans framework.yaml.
Depuis Symfony 4[1] :
composer require symfony/http-client
Utilisation
GET
On peut forcer l'utilisation de HTTP 2 à la création :
$httpClient = HttpClient::create(['http_version' => '2.0']);
$response = $httpClient->request('GET', 'https://fr.wikibooks.org/');
if (200 == $response->getStatusCode()) {
dd($response->getContent());
} else {
dd($response->getInfo('error'));
}
Ce code ne lève pas les exceptions de résolution DNS.
POST
Exemple en POST avec authentification :
$response = $httpClient->request('POST', 'https://fr.wikibooks.org/w/api.php', [
'auth_bearer' => 'mon_token',
'json' => $keyValuePairs,
]);
Problèmes connus
Ce composant est relativement jeune et souffre d'incomplétudes.
- On peut avoir du "null given" à tort sur un mapping DNS, solvable en rajoutant une option :
$options = array_merge($options, [
'resolve' => ['localhost' => '127.0.0.1']
]);
$httpClient->request()
renvoie uneSymfony\Contracts\HttpClient\ResponseInterface
, mais en cas d'erreur, elle ne contient qu'une ligne de résumé, soit moins d'informations qu'un client comme Postman.
Tests
Ce composant peut aussi serveur aux tests fonctionnels via PhpUnit. On l'appelle alors avec static::createClient
si le test extends WebTestCase
. Dans le cas d'un projet API Platform, on l'appelle de la même manière mais le test extends ApiTestCase
.
Exemple :
$client = static::createClient();
$client->request('GET', '/home');
var_dump($client->getResponse()->getContent());
Pour simuler plusieurs clients en parallèle : $client->insulate()
.
Pour simuler un utilisateur : $client->loginUser($monUser)
.