1
0
Fork 0
mirror of https://we.phorge.it/source/arcanist.git synced 2024-12-22 21:40:54 +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 $data;
private $expect;
private $disableContentDecoding;
/* -( Creating a New Request )--------------------------------------------- */
@ -276,6 +276,15 @@ abstract class BaseHTTPFuture extends Future {
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 )---------------------------------------------- */
@ -348,24 +357,26 @@ abstract class BaseHTTPFuture extends Future {
}
}
$content_encoding = null;
foreach ($headers as $header) {
list($name, $value) = $header;
$name = phutil_utf8_strtolower($name);
if (!strcasecmp($name, 'Content-Encoding')) {
$content_encoding = $value;
break;
}
}
switch ($content_encoding) {
case 'gzip':
$decoded_body = gzdecode($body);
if ($decoded_body === false) {
return $this->buildMalformedResult($raw_response);
if (!$this->getDisableContentDecoding()) {
$content_encoding = null;
foreach ($headers as $header) {
list($name, $value) = $header;
$name = phutil_utf8_strtolower($name);
if (!strcasecmp($name, 'Content-Encoding')) {
$content_encoding = $value;
break;
}
$body = $decoded_body;
break;
}
switch ($content_encoding) {
case 'gzip':
$decoded_body = @gzdecode($body);
if ($decoded_body === false) {
return $this->buildMalformedResult($raw_response);
}
$body = $decoded_body;
break;
}
}
$status = new HTTPFutureHTTPResponseStatus(