Метод request класса HttpClient
Метод request класса HttpClient выполняет HTTP-запрос
к удалённому серверу и возвращает объект ClientResponse.
Первым параметром передаётся HTTP-метод (например, 'GET'
или 'POST'), вторым - URL адрес, третьим - массив опций
запроса: заголовки, тело, query-параметры, таймауты и другие.
Метод является основным способом обращения к внешним сервисам
через компонент HttpClient.
Синтаксис
$client->request(string $method, string $url, array $options = []): ClientResponse
Пример
Давайте выполним простой GET-запрос к внешнему адресу:
<?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());
}
}
?>
Результат выполнения кода:
"page found"
Пример
Давайте передадим query-параметры через опцию query:
<?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/search', [
'query' => [
'name' => 'abcde',
'page' => 1,
],
]);
return new Response($res->getContent());
}
}
?>
Результат выполнения кода:
"abcde"
Пример
Давайте отправим POST-запрос с телом в формате JSON:
<?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('POST', 'https://example.com/api', [
'json' => [
'name' => 'abcde',
'text' => 'hello',
],
]);
return new Response($res->getContent());
}
}
?>
Результат выполнения кода:
"created"
Пример
Давайте передадим собственные заголовки и прочитаем статус-код ответа:
<?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', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer token',
],
]);
return new Response((string) $res->getStatusCode());
}
}
?>
Результат выполнения кода:
"200"
Смотрите также
-
класс
HttpClient,
который выполняет HTTP-запросы к внешним сервисам -
метод
stream,
который возвращает поток ответа без буферизации -
метод
getStatusCode,
который возвращает статус-код ответа -
метод
getContent,
который возвращает тело ответа