Класс HttpClient
Класс HttpClient создаёт HTTP-клиент для выполнения
запросов к внешним сервисам. Через метод request
передаётся HTTP-метод и URL, а через опции задаются
заголовки, тело запроса, параметры и таймауты. Клиент
возвращает объект ClientResponse с ответом сервера.
Синтаксис
use Symfony\Component\HttpClient\HttpClient;
$client = HttpClient::create();
$res = $client->request(method, url, options);
Пример
Давайте создадим клиент и выполним GET-запрос:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpClient\HttpClient;
class ApiController extends AbstractController
{
public function index(): Response
{
$client = HttpClient::create();
$res = $client->request('GET', 'https://example.com/api');
return new Response($res->getContent());
}
}
?>
Пример
Давайте отправим POST-запрос с телом в формате JSON:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpClient\HttpClient;
class ApiController extends AbstractController
{
public function index(): Response
{
$client = HttpClient::create();
$res = $client->request('POST', 'https://example.com/api', [
'json' => ['name' => 'abcde']
]);
return new Response($res->getContent());
}
}
?>
Пример
Давайте передадим собственные заголовки и прочитаем статус ответа:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpClient\HttpClient;
class ApiController extends AbstractController
{
public function index(): Response
{
$client = HttpClient::create();
$res = $client->request('GET', 'https://example.com/api', [
'headers' => ['Accept' => 'application/json']
]);
return new Response((string) $res->getStatusCode());
}
}
?>
Результат выполнения кода:
"200"
Пример
Давайте создадим клиент через DI-контейнер, внедрив
сервис HttpClientInterface:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Contracts\HttpClient\HttpClientInterface;
class ApiController extends AbstractController
{
public function index(HttpClientInterface $client): Response
{
$res = $client->request('GET', 'https://example.com/api');
return new Response($res->getContent());
}
}
?>
Смотрите также
-
метод
request,
который выполняет HTTP-запрос -
метод
stream,
который отдаёт ответ по частям -
метод
withOptions,
который задаёт опции по умолчанию -
класс
ClientResponse,
который представляет ответ сервера