1
0
Fork 0
mirror of https://we.phorge.it/source/arcanist.git synced 2024-11-25 16:22:42 +01:00

Allow HTTPFuture callers to disable processing of "Content-Encoding" response headers

Summary: Ref T13507. In Phabricator, we perform a specific "Accept-Encoding: gzip" setup test and want to manually decode the result. Allow callers to disable handling of "Content-Encoding".

Test Plan: Ran all Phabricator setup checks.

Maniphest Tasks: T13507

Differential Revision: https://secure.phabricator.com/D21121
This commit is contained in:
epriestley 2020-04-15 05:13:01 -07:00
parent 377ed2ed8d
commit 68f050bd14

View file

@ -26,7 +26,7 @@ abstract class BaseHTTPFuture extends Future {
private $uri; private $uri;
private $data; private $data;
private $expect; private $expect;
private $disableContentDecoding;
/* -( Creating a New Request )--------------------------------------------- */ /* -( Creating a New Request )--------------------------------------------- */
@ -276,6 +276,15 @@ abstract class BaseHTTPFuture extends Future {
return strlen(phutil_build_http_querystring($data)); return strlen(phutil_build_http_querystring($data));
} }
public function setDisableContentDecoding($disable_decoding) {
$this->disableContentDecoding = $disable_decoding;
return $this;
}
public function getDisableContentDecoding() {
return $this->disableContentDecoding;
}
/* -( Resolving the Request )---------------------------------------------- */ /* -( Resolving the Request )---------------------------------------------- */
@ -348,6 +357,7 @@ abstract class BaseHTTPFuture extends Future {
} }
} }
if (!$this->getDisableContentDecoding()) {
$content_encoding = null; $content_encoding = null;
foreach ($headers as $header) { foreach ($headers as $header) {
list($name, $value) = $header; list($name, $value) = $header;
@ -360,13 +370,14 @@ abstract class BaseHTTPFuture extends Future {
switch ($content_encoding) { switch ($content_encoding) {
case 'gzip': case 'gzip':
$decoded_body = gzdecode($body); $decoded_body = @gzdecode($body);
if ($decoded_body === false) { if ($decoded_body === false) {
return $this->buildMalformedResult($raw_response); return $this->buildMalformedResult($raw_response);
} }
$body = $decoded_body; $body = $decoded_body;
break; break;
} }
}
$status = new HTTPFutureHTTPResponseStatus( $status = new HTTPFutureHTTPResponseStatus(
$response_code, $response_code,