diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/http_client_override_default_options.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/http_client_override_default_options.xml
index 085b4721cc7d8..8dd84123ca4b5 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/http_client_override_default_options.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/http_client_override_default_options.xml
@@ -10,11 +10,9 @@
bar
-
-
- baz
-
-
+
+ baz
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_default_options.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_default_options.yml
index 4abf1b897380d..6828f8ec231fb 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_default_options.yml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_default_options.yml
@@ -2,6 +2,6 @@ framework:
http_client:
max_host_connections: 4
default_options: ~
- clients:
+ scoped_clients:
foo:
- default_options: ~
+ base_uri: http://example.com
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_full_default_options.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_full_default_options.yml
index 3d18286820e05..5993be1778fe6 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_full_default_options.yml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_full_default_options.yml
@@ -1,13 +1,10 @@
framework:
http_client:
default_options:
- auth_basic: foo:bar
- query: {'foo': 'bar', 'bar': 'baz'}
headers:
X-powered: PHP
max_redirects: 2
http_version: 2.0
- base_uri: 'http://example.com'
resolve: {'localhost': '127.0.0.1'}
proxy: proxy.org
timeout: 3.5
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_override_default_options.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_override_default_options.yml
index 9a3d69e3585b4..1528a313d64e3 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_override_default_options.yml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/http_client_override_default_options.yml
@@ -3,8 +3,7 @@ framework:
max_host_connections: 4
default_options:
headers: {'foo': 'bar'}
- clients:
+ scoped_clients:
foo:
- max_host_connections: 5
- default_options:
- headers: {'bar': 'baz'}
+ base_uri: http://example.com
+ headers: {'bar': 'baz'}
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php
index e62651a40fced..acc7fbad156e7 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php
@@ -35,6 +35,7 @@
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
use Symfony\Component\DependencyInjection\Reference;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
+use Symfony\Component\HttpClient\ScopingHttpClient;
use Symfony\Component\HttpKernel\DependencyInjection\LoggerPass;
use Symfony\Component\Messenger\Tests\Fixtures\DummyMessage;
use Symfony\Component\Messenger\Tests\Fixtures\SecondMessage;
@@ -53,7 +54,6 @@
use Symfony\Component\Validator\Mapping\Loader\PropertyInfoLoader;
use Symfony\Component\Validator\Validation;
use Symfony\Component\Workflow;
-use Symfony\Contracts\HttpClient\HttpClientInterface;
abstract class FrameworkExtensionTest extends TestCase
{
@@ -1406,25 +1406,34 @@ public function testHttpClientDefaultOptions()
$this->assertTrue($container->hasDefinition('http_client'), '->registerHttpClientConfiguration() loads http_client.xml');
$defaultOptions = [
- 'query' => [],
'headers' => [],
'resolve' => [],
];
$this->assertSame([$defaultOptions, 4], $container->getDefinition('http_client')->getArguments());
$this->assertTrue($container->hasDefinition('foo'), 'should have the "foo" service.');
- $this->assertSame(HttpClientInterface::class, $container->getDefinition('foo')->getClass());
- $this->assertSame([$defaultOptions, 4], $container->getDefinition('foo')->getArguments());
+ $this->assertSame(ScopingHttpClient::class, $container->getDefinition('foo')->getClass());
}
public function testHttpClientOverrideDefaultOptions()
{
$container = $this->createContainerFromFile('http_client_override_default_options');
- $this->assertSame(['foo' => ['bar']], $container->getDefinition('http_client')->getArgument(0)['headers']);
+ $this->assertSame(['foo' => 'bar'], $container->getDefinition('http_client')->getArgument(0)['headers']);
$this->assertSame(4, $container->getDefinition('http_client')->getArgument(1));
- $this->assertSame(['bar' => ['baz'], 'foo' => ['bar']], $container->getDefinition('foo')->getArgument(0)['headers']);
- $this->assertSame(5, $container->getDefinition('foo')->getArgument(1));
+
+ $expected = [
+ 'http\://example\.com/' => [
+ 'base_uri' => 'http://example.com',
+ 'headers' => [
+ 'bar' => 'baz',
+ ],
+ 'query' => [],
+ 'resolve' => [],
+ ],
+ ];
+
+ $this->assertSame($expected, $container->getDefinition('foo')->getArgument(1));
}
public function testHttpClientFullDefaultOptions()
@@ -1433,12 +1442,9 @@ public function testHttpClientFullDefaultOptions()
$defaultOptions = $container->getDefinition('http_client')->getArgument(0);
- $this->assertSame('foo:bar', $defaultOptions['auth_basic']);
- $this->assertSame(['foo' => 'bar', 'bar' => 'baz'], $defaultOptions['query']);
- $this->assertSame(['x-powered' => ['PHP']], $defaultOptions['headers']);
+ $this->assertSame(['X-powered' => 'PHP'], $defaultOptions['headers']);
$this->assertSame(2, $defaultOptions['max_redirects']);
$this->assertSame(2.0, (float) $defaultOptions['http_version']);
- $this->assertSame('http://example.com', $defaultOptions['base_uri']);
$this->assertSame(['localhost' => '127.0.0.1'], $defaultOptions['resolve']);
$this->assertSame('proxy.org', $defaultOptions['proxy']);
$this->assertSame(3.5, $defaultOptions['timeout']);
diff --git a/src/Symfony/Component/HttpClient/Response/MockResponse.php b/src/Symfony/Component/HttpClient/Response/MockResponse.php
index 1e7581a5c1f53..9ca47e6624290 100644
--- a/src/Symfony/Component/HttpClient/Response/MockResponse.php
+++ b/src/Symfony/Component/HttpClient/Response/MockResponse.php
@@ -240,7 +240,7 @@ private static function readResponse(self $response, array $options, ResponseInt
$info = $mock->getInfo() ?: [];
$response->info['http_code'] = ($info['http_code'] ?? 0) ?: $mock->getStatusCode(false) ?: 200;
$response->addResponseHeaders($info['response_headers'] ?? [], $response->info, $response->headers);
- $dlSize = (int) ($response->headers['content-length'][0] ?? 0);
+ $dlSize = isset($response->headers['content-encoding']) ? 0 : (int) ($response->headers['content-length'][0] ?? 0);
$response->info = [
'start_time' => $response->info['start_time'],
@@ -282,7 +282,7 @@ private static function readResponse(self $response, array $options, ResponseInt
// "notify" completion
$onProgress($offset, $dlSize, $response->info);
- if (isset($response->headers['content-length']) && $offset !== $dlSize) {
+ if ($dlSize && $offset !== $dlSize) {
throw new TransportException(sprintf('Transfer closed with %s bytes remaining to read.', $dlSize - $offset));
}
}
diff --git a/src/Symfony/Component/HttpFoundation/ResponseHeaderBag.php b/src/Symfony/Component/HttpFoundation/ResponseHeaderBag.php
index 9e07221933096..cf44d0eceba8e 100644
--- a/src/Symfony/Component/HttpFoundation/ResponseHeaderBag.php
+++ b/src/Symfony/Component/HttpFoundation/ResponseHeaderBag.php
@@ -122,8 +122,7 @@ public function set($key, $values, $replace = true)
parent::set($key, $values, $replace);
// ensure the cache-control header has sensible defaults
- if (\in_array($uniqueKey, ['cache-control', 'etag', 'last-modified', 'expires'], true)) {
- $computed = $this->computeCacheControlValue();
+ if (\in_array($uniqueKey, ['cache-control', 'etag', 'last-modified', 'expires'], true) && '' !== $computed = $this->computeCacheControlValue()) {
$this->headers['cache-control'] = [$computed];
$this->headerNames['cache-control'] = 'Cache-Control';
$this->computedCacheControl = $this->parseCacheControl($computed);
diff --git a/src/Symfony/Component/HttpKernel/HttpClientKernel.php b/src/Symfony/Component/HttpKernel/HttpClientKernel.php
index 29a6a97cefe22..2c04e670cc05f 100644
--- a/src/Symfony/Component/HttpKernel/HttpClientKernel.php
+++ b/src/Symfony/Component/HttpKernel/HttpClientKernel.php
@@ -16,6 +16,7 @@
use Symfony\Component\HttpClient\HttpClient;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use Symfony\Component\Mime\Part\AbstractPart;
use Symfony\Component\Mime\Part\DataPart;
use Symfony\Component\Mime\Part\Multipart\FormDataPart;
@@ -60,7 +61,16 @@ public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQ
$this->logger->debug(sprintf('Response: %s %s', $response->getStatusCode(), $request->getUri()));
- return new Response($response->getContent(!$catch), $response->getStatusCode(), $response->getHeaders(!$catch));
+ $response = new Response($response->getContent(!$catch), $response->getStatusCode(), $response->getHeaders(!$catch));
+
+ $response->headers = new class($response->headers->all()) extends ResponseHeaderBag {
+ protected function computeCacheControlValue()
+ {
+ return $this->getCacheControlHeader(); // preserve the original value
+ }
+ };
+
+ return $response;
}
private function getBody(Request $request): ?AbstractPart
pFad - Phonifier reborn
Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies:
Alternative Proxy
pFad Proxy
pFad v3 Proxy
pFad v4 Proxy