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 replacementsd9cf28d
fixed protocol-relative URLs289da16
added override power to server parameters provided on request method
This commit is contained in:
commit
0380d1456a
@ -302,6 +302,15 @@ abstract class Client
|
|||||||
}
|
}
|
||||||
|
|
||||||
$uri = $this->getAbsoluteUri($uri);
|
$uri = $this->getAbsoluteUri($uri);
|
||||||
|
|
||||||
|
if (isset($server['HTTP_HOST'])) {
|
||||||
|
$uri = preg_replace('{^(https?\://)'.parse_url($uri, PHP_URL_HOST).'}', '\\1'.$server['HTTP_HOST'], $uri);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($server['HTTPS'])) {
|
||||||
|
$uri = preg_replace('{^'.parse_url($uri, PHP_URL_SCHEME).'}', $server['HTTPS'] ? 'https' : 'http', $uri);
|
||||||
|
}
|
||||||
|
|
||||||
$server = array_merge($this->server, $server);
|
$server = array_merge($this->server, $server);
|
||||||
|
|
||||||
if (!$this->history->isEmpty()) {
|
if (!$this->history->isEmpty()) {
|
||||||
@ -518,7 +527,7 @@ abstract class Client
|
|||||||
}
|
}
|
||||||
|
|
||||||
$server = $request->getServer();
|
$server = $request->getServer();
|
||||||
unset($server['HTTP_IF_NONE_MATCH'], $server['HTTP_IF_MODIFIED_SINCE']);
|
$server = $this->updateServerFromUri($server, $this->redirect);
|
||||||
|
|
||||||
$this->isMainRequest = false;
|
$this->isMainRequest = false;
|
||||||
|
|
||||||
@ -600,4 +609,14 @@ abstract class Client
|
|||||||
{
|
{
|
||||||
return $this->request($request->getMethod(), $request->getUri(), $request->getParameters(), $request->getFiles(), $request->getServer(), $request->getContent(), $changeHistory);
|
return $this->request($request->getMethod(), $request->getUri(), $request->getParameters(), $request->getFiles(), $request->getServer(), $request->getContent(), $changeHistory);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function updateServerFromUri($server, $uri)
|
||||||
|
{
|
||||||
|
$server['HTTP_HOST'] = parse_url($uri, PHP_URL_HOST);
|
||||||
|
$scheme = parse_url($uri, PHP_URL_SCHEME);
|
||||||
|
$server['HTTPS'] = null === $scheme ? $server['HTTPS'] : 'https' == $scheme;
|
||||||
|
unset($server['HTTP_IF_NONE_MATCH'], $server['HTTP_IF_MODIFIED_SINCE']);
|
||||||
|
|
||||||
|
return $server;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -585,4 +585,38 @@ class ClientTest extends \PHPUnit_Framework_TestCase
|
|||||||
$client->setServerParameter('HTTP_USER_AGENT', 'testua');
|
$client->setServerParameter('HTTP_USER_AGENT', 'testua');
|
||||||
$this->assertEquals('testua', $client->getServerParameter('HTTP_USER_AGENT'));
|
$this->assertEquals('testua', $client->getServerParameter('HTTP_USER_AGENT'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testSetServerParameterInRequest()
|
||||||
|
{
|
||||||
|
$client = new TestClient();
|
||||||
|
|
||||||
|
$this->assertEquals('localhost', $client->getServerParameter('HTTP_HOST'));
|
||||||
|
$this->assertEquals('Symfony2 BrowserKit', $client->getServerParameter('HTTP_USER_AGENT'));
|
||||||
|
|
||||||
|
$client->request('GET', 'https://www.example.com/https/www.example.com', array(), array(), array(
|
||||||
|
'HTTP_HOST' => 'testhost',
|
||||||
|
'HTTP_USER_AGENT' => 'testua',
|
||||||
|
'HTTPS' => false,
|
||||||
|
'NEW_SERVER_KEY' => 'new-server-key-value'
|
||||||
|
));
|
||||||
|
|
||||||
|
$this->assertEquals('localhost', $client->getServerParameter('HTTP_HOST'));
|
||||||
|
$this->assertEquals('Symfony2 BrowserKit', $client->getServerParameter('HTTP_USER_AGENT'));
|
||||||
|
|
||||||
|
$this->assertEquals('http://testhost/https/www.example.com', $client->getRequest()->getUri());
|
||||||
|
|
||||||
|
$server = $client->getRequest()->getServer();
|
||||||
|
|
||||||
|
$this->assertArrayHasKey('HTTP_USER_AGENT', $server);
|
||||||
|
$this->assertEquals('testua', $server['HTTP_USER_AGENT']);
|
||||||
|
|
||||||
|
$this->assertArrayHasKey('HTTP_HOST', $server);
|
||||||
|
$this->assertEquals('testhost', $server['HTTP_HOST']);
|
||||||
|
|
||||||
|
$this->assertArrayHasKey('NEW_SERVER_KEY', $server);
|
||||||
|
$this->assertEquals('new-server-key-value', $server['NEW_SERVER_KEY']);
|
||||||
|
|
||||||
|
$this->assertArrayHasKey('HTTPS', $server);
|
||||||
|
$this->assertFalse($server['HTTPS']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user