Метод stream класса HttpClient
Метод stream класса HttpClient выполняет
HTTP-запрос и возвращает ответ в виде потока.
В отличие от метода request, который загружает
всё содержимое ответа в память, stream отдаёт
данные частями по мере чтения. Первым параметром
передаётся HTTP-метод, вторым - URL адрес,
третьим - массив опций запроса.
Синтаксис
public function stream(string $method, string $url, array $options = []): ResponseInterface
Пример
Давайте выполним GET-запрос и прочитаем поток частями:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentHttpClientHttpClient;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(): Response
{
$client = HttpClient::create();
$response = $client->stream('GET', 'https://example.com/data');
$content = '';
foreach ($client->stream($response) as $chunk) {
$content .= $chunk->getContent();
}
return new Response($content);
}
}
?>
Результат выполнения кода:
"page found"
Пример
Давайте выполним POST-запрос с телом и передадим данные в поток:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentHttpClientHttpClient;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/user', name: 'article_user')]
public function user(): Response
{
$client = HttpClient::create();
$response = $client->stream('POST', 'https://example.com/user', [
'body' => ['name' => 'abcde']
]);
foreach ($client->stream($response) as $chunk) {
if ($chunk->isFirst()) {
echo $chunk->getStatusCode();
}
}
return new Response('hello');
}
}
?>
Результат выполнения кода:
"hello"
Смотрите также
-
класс
HttpClient,
который выполняет HTTP-запросы -
метод
request,
который выполняет запрос и загружает ответ целиком -
метод
withOptions,
который задаёт опции по умолчанию для клиента -
метод
getContent,
который возвращает содержимое ответа