bug #19317 [BrowserKit] Update Client::getAbsoluteUri() for query string only URIs (georaldc)
This PR was merged into the 2.7 branch.
Discussion
----------
[BrowserKit] Update Client::getAbsoluteUri() for query string only URIs
| Q | A
| ------------- | ---
| Branch? | 2.7
| Bug fix? | yes
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | #19303
| License | MIT
| Doc PR | -
This PR allows BrowserKit to treat a value containing only query string parameters the same way anchor/hash values are treated when passed as a URI argument to the getAbsoluteUri() method. Helps when encountering sites that force a redirect with a location header value containing only a query string.
Commits
-------
965408f
Update getAbsoluteUri() for query string uris
This commit is contained in:
commit
8b6d74e1e7
@ -522,9 +522,9 @@ abstract class Client
|
|||||||
return parse_url($currentUri, PHP_URL_SCHEME).':'.$uri;
|
return parse_url($currentUri, PHP_URL_SCHEME).':'.$uri;
|
||||||
}
|
}
|
||||||
|
|
||||||
// anchor?
|
// anchor or query string parameters?
|
||||||
if (!$uri || '#' == $uri[0]) {
|
if (!$uri || '#' == $uri[0] || '?' == $uri[0]) {
|
||||||
return preg_replace('/#.*?$/', '', $currentUri).$uri;
|
return preg_replace('/[#?].*?$/', '', $currentUri).$uri;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ('/' !== $uri[0]) {
|
if ('/' !== $uri[0]) {
|
||||||
|
@ -212,6 +212,15 @@ class ClientTest extends \PHPUnit_Framework_TestCase
|
|||||||
$client->request('GET', 'http://www.example.com/');
|
$client->request('GET', 'http://www.example.com/');
|
||||||
$client->request('GET', 'http');
|
$client->request('GET', 'http');
|
||||||
$this->assertEquals('http://www.example.com/http', $client->getRequest()->getUri(), '->request() uses the previous request for relative URLs');
|
$this->assertEquals('http://www.example.com/http', $client->getRequest()->getUri(), '->request() uses the previous request for relative URLs');
|
||||||
|
|
||||||
|
$client = new TestClient();
|
||||||
|
$client->request('GET', 'http://www.example.com/foo');
|
||||||
|
$client->request('GET', '?');
|
||||||
|
$this->assertEquals('http://www.example.com/foo?', $client->getRequest()->getUri(), '->request() uses the previous request for ?');
|
||||||
|
$client->request('GET', '?');
|
||||||
|
$this->assertEquals('http://www.example.com/foo?', $client->getRequest()->getUri(), '->request() uses the previous request for ?');
|
||||||
|
$client->request('GET', '?foo=bar');
|
||||||
|
$this->assertEquals('http://www.example.com/foo?foo=bar', $client->getRequest()->getUri(), '->request() uses the previous request for ?');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testRequestReferer()
|
public function testRequestReferer()
|
||||||
|
Reference in New Issue
Block a user