Метод toStream
Метод toStream класса ClientResponse возвращает тело
HTTP-ответа в виде потока (stream resource). Это удобно, когда
ответ содержит большой объём данных, и его не нужно загружать
в память целиком. Метод не принимает параметров и возвращает
ресурс, с которым можно работать через стандартные функции
PHP, например stream_get_contents или fread.
Синтаксис
$res->toStream();
Пример
Давайте выполним запрос и получим тело ответа в виде потока:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Contracts\HttpClient\HttpClientInterface;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(HttpClientInterface $client): Response
{
$res = $client->request('GET', 'https://example.com/article');
$stream = $res->toStream();
return new Response(stream_get_contents($stream));
}
}
?>
Результат выполнения кода:
"article"
Пример
Давайте запишем поток в файл с помощью stream_copy_to_stream:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Contracts\HttpClient\HttpClientInterface;
class ArticleController extends AbstractController
{
#[Route('/article/save', name: 'article_save')]
public function save(HttpClientInterface $client): Response
{
$res = $client->request('GET', 'https://example.com/article');
$stream = $res->toStream();
$file = fopen('/tmp/article.txt', 'w');
stream_copy_to_stream($stream, $file);
fclose($file);
return new Response('saved');
}
}
?>
Результат выполнения кода:
"user"
Смотрите также
-
класс
ClientResponse,
который представляет ответ HTTP-клиента -
метод
getContent,
который возвращает тело ответа строкой -
метод
toArray,
который возвращает тело ответа массивом -
метод
stream,
который выполняет запрос и отдаёт поток