[HttpClient] make response stream functionality consistent
This commit is contained in:
parent
5da9cf315f
commit
64f9111686
@ -49,7 +49,7 @@ class StreamWrapper
|
|||||||
*/
|
*/
|
||||||
public static function createResource(ResponseInterface $response, HttpClientInterface $client = null)
|
public static function createResource(ResponseInterface $response, HttpClientInterface $client = null)
|
||||||
{
|
{
|
||||||
if (null === $client && \is_callable([$response, 'toStream']) && isset(class_uses($response)[ResponseTrait::class])) {
|
if (\is_callable([$response, 'toStream']) && isset(class_uses($response)[ResponseTrait::class])) {
|
||||||
$stack = debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT | DEBUG_BACKTRACE_IGNORE_ARGS, 2);
|
$stack = debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT | DEBUG_BACKTRACE_IGNORE_ARGS, 2);
|
||||||
|
|
||||||
if ($response !== ($stack[1]['object'] ?? null)) {
|
if ($response !== ($stack[1]['object'] ?? null)) {
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
namespace Symfony\Component\HttpClient\Tests;
|
namespace Symfony\Component\HttpClient\Tests;
|
||||||
|
|
||||||
use Symfony\Component\HttpClient\Exception\ClientException;
|
use Symfony\Component\HttpClient\Exception\ClientException;
|
||||||
|
use Symfony\Component\HttpClient\Response\StreamWrapper;
|
||||||
use Symfony\Contracts\HttpClient\Test\HttpClientTestCase as BaseHttpClientTestCase;
|
use Symfony\Contracts\HttpClient\Test\HttpClientTestCase as BaseHttpClientTestCase;
|
||||||
|
|
||||||
abstract class HttpClientTestCase extends BaseHttpClientTestCase
|
abstract class HttpClientTestCase extends BaseHttpClientTestCase
|
||||||
@ -91,4 +92,40 @@ abstract class HttpClientTestCase extends BaseHttpClientTestCase
|
|||||||
$this->assertSame('', fread($stream, 8192));
|
$this->assertSame('', fread($stream, 8192));
|
||||||
$this->assertTrue(feof($stream));
|
$this->assertTrue(feof($stream));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testResponseStreamRewind()
|
||||||
|
{
|
||||||
|
$client = $this->getHttpClient(__FUNCTION__);
|
||||||
|
$response = $client->request('GET', 'http://localhost:8057/103');
|
||||||
|
|
||||||
|
$stream = $response->toStream();
|
||||||
|
|
||||||
|
$this->assertSame('Here the body', stream_get_contents($stream));
|
||||||
|
rewind($stream);
|
||||||
|
$this->assertSame('Here the body', stream_get_contents($stream));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testStreamWrapperStreamRewind()
|
||||||
|
{
|
||||||
|
$client = $this->getHttpClient(__FUNCTION__);
|
||||||
|
$response = $client->request('GET', 'http://localhost:8057/103');
|
||||||
|
|
||||||
|
$stream = StreamWrapper::createResource($response);
|
||||||
|
|
||||||
|
$this->assertSame('Here the body', stream_get_contents($stream));
|
||||||
|
rewind($stream);
|
||||||
|
$this->assertSame('Here the body', stream_get_contents($stream));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testStreamWrapperWithClientStreamRewind()
|
||||||
|
{
|
||||||
|
$client = $this->getHttpClient(__FUNCTION__);
|
||||||
|
$response = $client->request('GET', 'http://localhost:8057/103');
|
||||||
|
|
||||||
|
$stream = StreamWrapper::createResource($response, $client);
|
||||||
|
|
||||||
|
$this->assertSame('Here the body', stream_get_contents($stream));
|
||||||
|
rewind($stream);
|
||||||
|
$this->assertSame('Here the body', stream_get_contents($stream));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user