8000 bug #10549 Fixed server values in BrowserKit (fabpot) · symfony/symfony@0380d14 · GitHub
[go: up one dir, main page]

Skip to content

Commit 0380d14

Browse files
committed
bug #10549 Fixed server values in BrowserKit (fabpot)
This PR was merged into the 2.3 branch. Discussion ---------- Fixed server values in BrowserKit | Q | A | ------------- | --- | Bug fix? | yes | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | #9527, #9762, #9821, #9901 | License | MIT | Doc PR | n/a Commits ------- 65b9810 fixed too greedy replacements d9cf28d fixed protocol-relative URLs 289da16 added override power to server parameters provided on request method
2 parents 9068875 + 65b9810 commit 0380d14

File tree

2 files changed

+54
-1
lines changed

2 files changed

+54
-1
lines changed

src/Symfony/Component/BrowserKit/Client.php

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,15 @@ public function request($method, $uri, array $parameters = array(), array $files
302302
}
303303

304304
$uri = $this->getAbsoluteUri($uri);
305+
306+
if (isset($server['HTTP_HOST'])) {
307+
$uri = preg_replace('{^(https?\://)'.parse_url($uri, PHP_URL_HOST).'}', '\\1'.$server['HTTP_HOST'], $uri);
308+
}
309+
310+
if (isset($server['HTTPS'])) {
311+
$uri = preg_replace('{^'.parse_url($uri, PHP_URL_SCHEME).'}', $server['HTTPS'] ? 'https' : 'http', $uri);
312+
}
313+
305314
$server = array_merge($this->server, $server);
306315

307316
if (!$this->history->isEmpty()) {
@@ -518,7 +527,7 @@ public function followRedirect()
518527
}
519528

520529
$server = $request->getServer();
521-
unset($server['HTTP_IF_NONE_MATCH'], $server['HTTP_IF_MODIFIED_SINCE']);
530+
$server = $this->updateServerFromUri($server, $this->redirect);
522531

523532
$this->isMainRequest = false;
524533

@@ -600,4 +609,14 @@ protected function requestFromRequest(Request $request, $changeHistory = true)
600609
{
601610
return $this->request($request->getMethod(), $request->getUri(), $request->getParameters(), $request->getFiles(), $request->getServer(), $request->getContent(), $changeHistory);
602611
}
612+
613+
private function updateServerFromUri($server, $uri)
614+
{
615+
$server['HTTP_HOST'] = parse_url($uri, PHP_URL_HOST);
616+
$scheme = parse_url($uri, PHP_URL_SCHEME);
617+
$server['HTTPS'] = null === $scheme ? $server['HTTPS'] : 'https' == $scheme;
618+
unset($server['HTTP_IF_NONE_MATCH'], $server['HTTP_IF_MODIFIED_SINCE']);
619+
620+
return $server;
621+
}
603622
}

src/Symfony/Component/BrowserKit/Tests/ClientTest.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -585,4 +585,38 @@ public function testSetServerParameter()
585585
$client->setServerParameter('HTTP_USER_AGENT', 'testua');
586586
$this->assertEquals('testua', $client->getServerParameter('HTTP_USER_AGENT'));
587587
}
588+
589+
public function testSetServerParameterInRequest()
590+
{
591+
$client = new TestClient();
592+
593+
$this->assertEquals('localhost', $client->getServerParameter('HTTP_HOST'));
594+
$this->assertEquals('Symfony2 BrowserKit', $client->getServerParameter('HTTP_USER_AGENT'));
595+
596+
$client->request('GET', 'https://www.example.com/https/www.example.com', array(), array(), array(
597+
'HTTP_HOST' => 'testhost',
598+
'HTTP_USER_AGENT' => 'testua',
599+
'HTTPS' => false,
600+
'NEW_SERVER_KEY' => 'new-server-key-value'
601+
));
602+
603+
$this->assertEquals('localhost', $client->getServerParameter('HTTP_HOST'));
604+
$this->assertEquals('Symfony2 BrowserKit', $client->getServerParameter('HTTP_USER_AGENT'));
605+
606+
$this->assertEquals('http://testhost/https/www.example.com', $client->getRequest()->getUri());
607+
608+
$server = $client->getRequest()->getServer();
609+
610+
$this->assertArrayHasKey('HTTP_USER_AGENT', $server);
611+
$this->assertEquals('testua', $server['HTTP_USER_AGENT']);
612+
613+
$this->assertArrayHasKey('HTTP_HOST', $server);
614+
$this->assertEquals('testhost', $server['HTTP_HOST']);
615+
616+
$this->assertArrayHasKey('NEW_SERVER_KEY', $server);
617+
$this->assertEquals('new-server-key-value', $server['NEW_SERVER_KEY']);
618+
619+
$this->assertArrayHasKey('HTTPS', $server);
620+
$this->assertFalse($server['HTTPS']);
621+
}
588622
}

0 commit comments

Comments
 (0)
0