Метод withOptions
Метод withOptions класса HttpClient возвращает новый экземпляр клиента с объединёнными опциями. Первым параметром передаётся массив опций, которые нужно добавить или переопределить. Опции применяются ко всем последующим запросам данного экземпляра клиента.
Синтаксис
public function withOptions(array $options): static
Пример
Давайте создадим клиент с базовым URL и таймаутом:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpClient\HttpClient;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(): Response
{
$client = HttpClient::create();
$client = $client->withOptions([
'base_uri' => 'https://example.com',
'timeout' => 5,
]);
$res = $client->request('GET', '/api/article');
return new Response($res->getContent());
}
}
?>
Результат выполнения кода:
"article"
Пример
Давайте добавим заголовки авторизации и проверим статус ответа:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpClient\HttpClient;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/user', name: 'article_user')]
public function user(): Response
{
$client = HttpClient::create();
$client = $client->withOptions([
'headers' => [
'Authorization' => 'Bearer abcde',
'Accept' => 'application/json',
],
]);
$res = $client->request('GET', 'https://example.com/api/user');
return new Response((string) $res->getStatusCode());
}
}
?>
Результат выполнения кода:
"200"
Пример
Давайте переопределим опции при повторном вызове withOptions:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpClient\HttpClient;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/hello', name: 'article_hello')]
public function hello(): Response
{
$client = HttpClient::create();
$client = $client->withOptions([
'timeout' => 5,
'headers' => ['Accept' => 'text/html'],
]);
$client = $client->withOptions([
'timeout' => 10,
]);
$res = $client->request('GET', 'https://example.com/hello');
return new Response($res->getContent());
}
}
?>
Результат выполнения кода:
"hello"
Смотрите также
-
класс
HttpClient,
который выполняет HTTP-запросы -
метод
request,
который отправляет HTTP-запрос -
метод
stream,
который возвращает поток ответа -
класс
ClientResponse,
который представляет ответ клиента