[HttpClient] add $response->cancel()

This commit is contained in:
Nicolas Grekas 2019-06-03 19:56:51 +02:00
parent 40076b98bf
commit c402418723
5 changed files with 26 additions and 2 deletions

View File

@ -26,7 +26,7 @@
"psr/container": "^1.0",
"psr/link": "^1.0",
"psr/log": "~1.0",
"symfony/contracts": "^1.1.1",
"symfony/contracts": "^1.1.3",
"symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-intl-icu": "~1.0",
"symfony/polyfill-intl-idn": "^1.10",

View File

@ -169,6 +169,15 @@ trait ResponseTrait
return $content;
}
/**
* {@inheritdoc}
*/
public function cancel(): void
{
$this->info['error'] = 'Response has been canceled.';
$this->close();
}
/**
* Closes the response and all its network handles.
*/

View File

@ -21,7 +21,7 @@
"require": {
"php": "^7.1.3",
"psr/log": "^1.0",
"symfony/http-client-contracts": "^1.1",
"symfony/http-client-contracts": "^1.1.3",
"symfony/polyfill-php73": "^1.11"
},
"require-dev": {

View File

@ -71,6 +71,11 @@ interface ResponseInterface
*/
public function toArray(bool $throw = true): array;
/**
* Cancels the response.
*/
public function cancel(): void;
/**
* Returns info coming from the transport layer.
*

View File

@ -481,6 +481,16 @@ abstract class HttpClientTestCase extends TestCase
$this->assertSame(['foo' => '0123456789', 'REQUEST_METHOD' => 'POST'], $response->toArray());
}
public function testCancel()
{
$client = $this->getHttpClient(__FUNCTION__);
$response = $client->request('GET', 'http://localhost:8057/timeout-header');
$response->cancel();
$this->expectException(TransportExceptionInterface::class);
$response->getHeaders();
}
public function testOnProgressCancel()
{
$client = $this->getHttpClient(__FUNCTION__);