mirror of
https://github.com/guzzle/guzzle.git
synced 2025-02-24 18:13:00 +01:00
Adding the ability to disable redirects per-request
This commit is contained in:
parent
fd8515cd92
commit
138eac1840
@ -23,7 +23,7 @@ class Client extends AbstractHasDispatcher implements ClientInterface
|
||||
const REQUEST_PARAMS = 'request.params';
|
||||
const CURL_OPTIONS = 'curl.options';
|
||||
const SSL_CERT_AUTHORITY = 'ssl.certificate_authority';
|
||||
const DISABLE_REDIRECTS = 'client.disable_redirects';
|
||||
const DISABLE_REDIRECTS = RedirectPlugin::DISABLE;
|
||||
|
||||
/**
|
||||
* @var Collection Default HTTP headers to set on each request
|
||||
|
@ -19,6 +19,7 @@ class RedirectPlugin implements EventSubscriberInterface
|
||||
const MAX_REDIRECTS = 'redirect.max';
|
||||
const STRICT_REDIRECTS = 'redirect.strict';
|
||||
const PARENT_REQUEST = 'redirect.parent_request';
|
||||
const DISABLE = 'redirect.disable';
|
||||
|
||||
/**
|
||||
* @var int Default number of redirects allowed when no setting is supplied by a request
|
||||
@ -54,12 +55,15 @@ class RedirectPlugin implements EventSubscriberInterface
|
||||
public function onRequestSent(Event $event)
|
||||
{
|
||||
$response = $event['response'];
|
||||
$request = $event['request'];
|
||||
|
||||
// Only act on redirect requests with Location headers
|
||||
if (!$response || !$response->isRedirect() || !$response->hasHeader('Location')) {
|
||||
if (!$response || !$response->isRedirect() || !$response->hasHeader('Location')
|
||||
|| $request->getParams()->get(self::DISABLE)
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
$request = $event['request'];
|
||||
$orignalRequest = $this->prepareRedirection($request);
|
||||
|
||||
// Create a redirect request based on the redirect rules set on the request
|
||||
|
@ -12,7 +12,7 @@ use Guzzle\Http\Message\RequestInterface;
|
||||
use Guzzle\Http\Message\Request;
|
||||
use Guzzle\Http\Message\Response;
|
||||
use Guzzle\Http\Message\RequestFactory;
|
||||
use Guzzle\Http\Exception\RequestException;
|
||||
use Guzzle\Http\RedirectPlugin;
|
||||
use Guzzle\Http\Exception\BadResponseException;
|
||||
|
||||
/**
|
||||
@ -832,4 +832,17 @@ class RequestTest extends \Guzzle\Tests\GuzzleTestCase
|
||||
$this->assertEquals(200, $request->getResponse()->getStatusCode());
|
||||
$this->assertEquals(303, $request->getResponse()->getPreviousResponse()->getStatusCode());
|
||||
}
|
||||
|
||||
public function testUnresolvedRedirectsReturnResponse()
|
||||
{
|
||||
$this->getServer()->flush();
|
||||
$this->getServer()->enqueue(array(
|
||||
"HTTP/1.1 303 SEE OTHER\r\nContent-Length: 0\r\n\r\n",
|
||||
"HTTP/1.1 301 Foo\r\nLocation: /foo\r\nContent-Length: 0\r\n\r\n"
|
||||
));
|
||||
$request = $this->request;
|
||||
$this->assertEquals(303, $request->send()->getStatusCode());
|
||||
$request->getParams()->set(RedirectPlugin::DISABLE, true);
|
||||
$this->assertEquals(301, $request->send()->getStatusCode());
|
||||
}
|
||||
}
|
||||
|
@ -153,4 +153,14 @@ class RedirectPluginTest extends \Guzzle\Tests\GuzzleTestCase
|
||||
$body->read(1);
|
||||
$request->setBody($body)->send();
|
||||
}
|
||||
|
||||
public function testRedirectsCanBeDisabledPerRequest()
|
||||
{
|
||||
$this->getServer()->flush();
|
||||
$this->getServer()->enqueue(array("HTTP/1.1 301 Foo\r\nLocation: /foo\r\nContent-Length: 0\r\n\r\n"));
|
||||
$client = new Client($this->getServer()->getUrl());
|
||||
$request = $client->put();
|
||||
$request->getParams()->set(RedirectPlugin::DISABLE, true);
|
||||
$this->assertEquals(301, $request->send()->getStatusCode());
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user