/
githubmirror
/
symfony
Обзор
Документация
Войти
/
githubmirror
/
symfony
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
8.2
src/Symfony/Component/HttpFoundation/Tests/RequestTest.php
3 094 строки
126 KB
Nicolas Grekas
[HttpFoundation] Deprecate the unused Request::$trustedHosts property
10 авг 2026, 13:11
10 авг 2026, 13:11
e28e307
Код
Авторство
О чём код?
<?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\HttpFoundation\Tests; use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\Attributes\Group; use PHPUnit\Framework\Attributes\IgnoreDeprecations; use PHPUnit\Framework\Attributes\RequiresPhpExtension; use PHPUnit\Framework\Attributes\TestWith; use PHPUnit\Framework\TestCase; use Symfony\Component\HttpFoundation\Exception\BadRequestException; use Symfony\Component\HttpFoundation\Exception\ConflictingHeadersException; use Symfony\Component\HttpFoundation\Exception\JsonException; use Symfony\Component\HttpFoundation\Exception\SuspiciousOperationException; use Symfony\Component\HttpFoundation\FileBag; use Symfony\Component\HttpFoundation\HeaderBag; use Symfony\Component\HttpFoundation\InputBag; use Symfony\Component\HttpFoundation\IpUtils; use Symfony\Component\HttpFoundation\ParameterBag; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\ServerBag; use Symfony\Component\HttpFoundation\Session\Session; use Symfony\Component\HttpFoundation\Session\Storage\MockArraySessionStorage; class RequestTest extends TestCase { protected function tearDown(): void { Request::setTrustedProxies([], -1); Request::setTrustedHosts([]); Request::setAllowedHttpMethodOverride(null); Request::setFactory(null); \Closure::bind(static function () { self::$formats = null; self::$trustedHosts = []; }, null, Request::class)(); } public function testInitialize() { $request = new Request(); $request->initialize(['foo' => 'bar']); $this->assertEquals('bar', $request->query->get('foo'), '->initialize() takes an array of query parameters as its first argument'); $request->initialize([], ['foo' => 'bar']); $this->assertEquals('bar', $request->request->get('foo'), '->initialize() takes an array of request parameters as its second argument'); $request->initialize([], [], ['foo' => 'bar']); $this->assertEquals('bar', $request->attributes->get('foo'), '->initialize() takes an array of attributes as its third argument'); $request->initialize([], [], [], [], [], ['HTTP_FOO' => 'bar']); $this->assertEquals('bar', $request->headers->get('FOO'), '->initialize() takes an array of HTTP headers as its sixth argument'); } public function testGetLocale() { $request = new Request(); $request->setLocale('pl'); $locale = $request->getLocale(); $this->assertEquals('pl', $locale); } public function testGetUser() { $request = Request::create('http://user:password@test.com'); $user = $request->getUser(); $this->assertEquals('user', $user); } public function testGetPassword() { $request = Request::create('http://user:password@test.com'); $password = $request->getPassword(); $this->assertEquals('password', $password); } public function testIsNoCache() { $request = new Request(); $isNoCache = $request->isNoCache(); $this->assertFalse($isNoCache); } public function testGetContentTypeFormat() { $request = new Request(); $this->assertNull($request->getContentTypeFormat()); $server = ['HTTP_CONTENT_TYPE' => 'application/json']; $request = new Request([], [], [], [], [], $server); $this->assertEquals('json', $request->getContentTypeFormat()); $server = ['HTTP_CONTENT_TYPE' => 'text/html']; $request = new Request([], [], [], [], [], $server); $this->assertEquals('html', $request->getContentTypeFormat()); } public function testSetDefaultLocale() { $request = new Request(); $request->setDefaultLocale('pl'); $locale = $request->getLocale(); $this->assertEquals('pl', $locale); } public function testCreate() { $request = Request::create('http://test.com/foo?bar=baz'); $this->assertEquals('http://test.com/foo?bar=baz', $request->getUri()); $this->assertEquals('/foo', $request->getPathInfo()); $this->assertEquals('bar=baz', $request->getQueryString()); $this->assertEquals(80, $request->getPort()); $this->assertEquals('test.com', $request->getHttpHost()); $this->assertFalse($request->isSecure()); $request = Request::create('http://test.com/foo', 'GET', ['bar' => 'baz']); $this->assertEquals('http://test.com/foo?bar=baz', $request->getUri()); $this->assertEquals('/foo', $request->getPathInfo()); $this->assertEquals('bar=baz', $request->getQueryString()); $this->assertEquals(80, $request->getPort()); $this->assertEquals('test.com', $request->getHttpHost()); $this->assertFalse($request->isSecure()); $request = Request::create('http://test.com/foo?bar=foo', 'GET', ['bar' => 'baz']); $this->assertEquals('http://test.com/foo?bar=baz', $request->getUri()); $this->assertEquals('/foo', $request->getPathInfo()); $this->assertEquals('bar=baz', $request->getQueryString()); $this->assertEquals(80, $request->getPort()); $this->assertEquals('test.com', $request->getHttpHost()); $this->assertFalse($request->isSecure()); $request = Request::create('https://test.com/foo?foo.bar=baz'); $this->assertEquals('https://test.com/foo?foo.bar=baz', $request->getUri()); $this->assertEquals('/foo', $request->getPathInfo()); $this->assertEquals('foo.bar=baz', $request->getQueryString()); $this->assertEquals(443, $request->getPort()); $this->assertEquals('test.com', $request->getHttpHost()); $this->assertTrue($request->isSecure()); $this->assertSame(['foo_bar' => 'baz'], $request->query->all()); $request = Request::create('test.com:90/foo'); $this->assertEquals('http://test.com:90/foo', $request->getUri()); $this->assertEquals('/foo', $request->getPathInfo()); $this->assertEquals('test.com', $request->getHost()); $this->assertEquals('test.com:90', $request->getHttpHost()); $this->assertEquals(90, $request->getPort()); $this->assertFalse($request->isSecure()); $request = Request::create('https://test.com:90/foo'); $this->assertEquals('https://test.com:90/foo', $request->getUri()); $this->assertEquals('/foo', $request->getPathInfo()); $this->assertEquals('test.com', $request->getHost()); $this->assertEquals('test.com:90', $request->getHttpHost()); $this->assertEquals(90, $request->getPort()); $this->assertTrue($request->isSecure()); $request = Request::create('https://127.0.0.1:90/foo'); $this->assertEquals('https://127.0.0.1:90/foo', $request->getUri()); $this->assertEquals('/foo', $request->getPathInfo()); $this->assertEquals('127.0.0.1', $request->getHost()); $this->assertEquals('127.0.0.1:90', $request->getHttpHost()); $this->assertEquals(90, $request->getPort()); $this->assertTrue($request->isSecure()); $request = Request::create('https://[::1]:90/foo'); $this->assertEquals('https://[::1]:90/foo', $request->getUri()); $this->assertEquals('/foo', $request->getPathInfo()); $this->assertEquals('[::1]', $request->getHost()); $this->assertEquals('[::1]:90', $request->getHttpHost()); $this->assertEquals(90, $request->getPort()); $this->assertTrue($request->isSecure()); $request = Request::create('https://[::1]/foo'); $this->assertEquals('https://[::1]/foo', $request->getUri()); $this->assertEquals('/foo', $request->getPathInfo()); $this->assertEquals('[::1]', $request->getHost()); $this->assertEquals('[::1]', $request->getHttpHost()); $this->assertEquals(443, $request->getPort()); $this->assertTrue($request->isSecure()); $json = '{"jsonrpc":"2.0","method":"echo","id":7,"params":["Hello World"]}'; $request = Request::create('http://example.com/jsonrpc', 'POST', [], [], [], [], $json); $this->assertEquals($json, $request->getContent()); $this->assertFalse($request->isSecure()); $request = Request::create('http://test.com'); $this->assertEquals('http://test.com/', $request->getUri()); $this->assertEquals('/', $request->getPathInfo()); $this->assertEquals('', $request->getQueryString()); $this->assertEquals(80, $request->getPort()); $this->assertEquals('test.com', $request->getHttpHost()); $this->assertFalse($request->isSecure()); $request = Request::create('http://test.com?test=1'); $this->assertEquals('http://test.com/?test=1', $request->getUri()); $this->assertEquals('/', $request->getPathInfo()); $this->assertEquals('test=1', $request->getQueryString()); $this->assertEquals(80, $request->getPort()); $this->assertEquals('test.com', $request->getHttpHost()); $this->assertFalse($request->isSecure()); $request = Request::create('http://test.com:90/?test=1'); $this->assertEquals('http://test.com:90/?test=1', $request->getUri()); $this->assertEquals('/', $request->getPathInfo()); $this->assertEquals('test=1', $request->getQueryString()); $this->assertEquals(90, $request->getPort()); $this->assertEquals('test.com:90', $request->getHttpHost()); $this->assertFalse($request->isSecure()); $request = Request::create('http://username:password@test.com'); $this->assertEquals('http://test.com/', $request->getUri()); $this->assertEquals('/', $request->getPathInfo()); $this->assertEquals('', $request->getQueryString()); $this->assertEquals(80, $request->getPort()); $this->assertEquals('test.com', $request->getHttpHost()); $this->assertEquals('username', $request->getUser()); $this->assertEquals('password', $request->getPassword()); $this->assertFalse($request->isSecure()); $request = Request::create('http://username@test.com'); $this->assertEquals('http://test.com/', $request->getUri()); $this->assertEquals('/', $request->getPathInfo()); $this->assertEquals('', $request->getQueryString()); $this->assertEquals(80, $request->getPort()); $this->assertEquals('test.com', $request->getHttpHost()); $this->assertEquals('username', $request->getUser()); $this->assertSame('', $request->getPassword()); $this->assertFalse($request->isSecure()); $request = Request::create('http://test.com/?foo'); $this->assertEquals('/?foo', $request->getRequestUri()); $this->assertEquals(['foo' => ''], $request->query->all()); // assume rewrite rule: (.*) --> app/app.php; app/ is a symlink to a symfony web/ directory $request = Request::create('http://test.com/apparthotel-1234', 'GET', [], [], [], [ 'DOCUMENT_ROOT' => '/var/www/www.test.com', 'SCRIPT_FILENAME' => '/var/www/www.test.com/app/app.php', 'SCRIPT_NAME' => '/app/app.php', 'PHP_SELF' => '/app/app.php/apparthotel-1234', ]); $this->assertEquals('http://test.com/apparthotel-1234', $request->getUri()); $this->assertEquals('/apparthotel-1234', $request->getPathInfo()); $this->assertEquals('', $request->getQueryString()); $this->assertEquals(80, $request->getPort()); $this->assertEquals('test.com', $request->getHttpHost()); $this->assertFalse($request->isSecure()); // Fragment should not be included in the URI $request = Request::create('http://test.com/foo#bar'); $this->assertEquals('http://test.com/foo', $request->getUri()); } public function testHttpMethodOverrideRespectsAllowedListWithHeader() { $request = Request::create('http://example.com/', 'POST'); $request->headers->set('X-HTTP-METHOD-OVERRIDE', 'PATCH'); Request::setAllowedHttpMethodOverride(['PUT', 'PATCH']); $this->assertSame('PATCH', $request->getMethod()); } public function testHttpMethodOverrideDisallowedSkipsOverrideWithHeader() { $request = Request::create('http://example.com/', 'POST'); $request->headers->set('X-HTTP-METHOD-OVERRIDE', 'DELETE'); Request::setAllowedHttpMethodOverride(['PUT', 'PATCH']); $this->assertSame('POST', $request->getMethod()); } public function testHttpMethodOverrideDisabledWithEmptyAllowedList() { $request = Request::create('http://example.com/', 'POST'); $request->headers->set('X-HTTP-METHOD-OVERRIDE', 'PUT'); Request::setAllowedHttpMethodOverride([]); $this->assertSame('POST', $request->getMethod()); } public function testHttpMethodOverrideRespectsAllowedListWithParameter() { Request::enableHttpMethodParameterOverride(); Request::setAllowedHttpMethodOverride(['PUT']); try { $request = Request::create('http://example.com/', 'POST', ['_method' => 'PUT']); $this->assertSame('PUT', $request->getMethod()); } finally { (new \ReflectionProperty(Request::class, 'httpMethodParameterOverride'))->setValue(null, false); } } #[TestWith(['CONNECT'])] #[TestWith(['GET'])] #[TestWith(['HEAD'])] #[TestWith(['TRACE'])] public function testHttpMethodOverrideCannotBeAppliedToCertainMethods(string $httpOverrideMethod) { $this->expectException(\InvalidArgumentException::class); Request::setAllowedHttpMethodOverride([$httpOverrideMethod]); } public function testCreateWithRequestUri() { $request = Request::create('http://test.com:80/foo'); $request->server->set('REQUEST_URI', 'http://test.com:80/foo'); $this->assertEquals('http://test.com/foo', $request->getUri()); $this->assertEquals('/foo', $request->getPathInfo()); $this->assertEquals('test.com', $request->getHost()); $this->assertEquals('test.com', $request->getHttpHost()); $this->assertEquals(80, $request->getPort()); $this->assertFalse($request->isSecure()); $request = Request::create('http://test.com:8080/foo'); $request->server->set('REQUEST_URI', 'http://test.com:8080/foo'); $this->assertEquals('http://test.com:8080/foo', $request->getUri()); $this->assertEquals('/foo', $request->getPathInfo()); $this->assertEquals('test.com', $request->getHost()); $this->assertEquals('test.com:8080', $request->getHttpHost()); $this->assertEquals(8080, $request->getPort()); $this->assertFalse($request->isSecure()); $request = Request::create('http://test.com/foo?bar=foo', 'GET', ['bar' => 'baz']); $request->server->set('REQUEST_URI', 'http://test.com/foo?bar=foo'); $this->assertEquals('http://test.com/foo?bar=baz', $request->getUri()); $this->assertEquals('/foo', $request->getPathInfo()); $this->assertEquals('bar=baz', $request->getQueryString()); $this->assertEquals('test.com', $request->getHost()); $this->assertEquals('test.com', $request->getHttpHost()); $this->assertEquals(80, $request->getPort()); $this->assertFalse($request->isSecure()); $request = Request::create('https://test.com:443/foo'); $request->server->set('REQUEST_URI', 'https://test.com:443/foo'); $this->assertEquals('https://test.com/foo', $request->getUri()); $this->assertEquals('/foo', $request->getPathInfo()); $this->assertEquals('test.com', $request->getHost()); $this->assertEquals('test.com', $request->getHttpHost()); $this->assertEquals(443, $request->getPort()); $this->assertTrue($request->isSecure()); // Fragment should not be included in the URI $request = Request::create('http://test.com/foo#bar\\baz'); $request->server->set('REQUEST_URI', 'http://test.com/foo#bar\\baz'); $this->assertEquals('http://test.com/foo', $request->getUri()); $request = Request::create('http://test.com/foo?bar=f\\o'); $this->assertEquals('http://test.com/foo?bar=f%5Co', $request->getUri()); $this->assertEquals('/foo', $request->getPathInfo()); $this->assertEquals('bar=f%5Co', $request->getQueryString()); } #[TestWith(['http://foo.com\bar'])] #[TestWith(['\\\foo.com/bar'])] #[TestWith(['a b'])] #[TestWith(['a b'])] #[TestWith(['a b'])] #[TestWith(['