MDL-77990 enrol_lti: fix http_client shim by using curl getResponse

Fixes an error in the parsing of response headers containing multiple
HTTP responses in the raw response. Curl already handles this, so let
it do the work.
This commit is contained in:
Jake Dallimore 2023-05-05 10:00:28 +08:00
parent 159a131989
commit 75ba439f5b

View File

@ -77,23 +77,11 @@ class http_client implements IHttpClient {
$info = $this->curlclient->get_info();
if (!$this->curlclient->get_errno() && !$this->curlclient->error) {
// No errors, so format the response.
$headersize = $info['header_size'];
$resheaders = substr($res ?? '', 0, $headersize);
$resbody = substr($res ?? '', $headersize);
$headerlines = array_filter(explode("\r\n", $resheaders));
$parsedresponseheaders = [
'httpstatus' => array_shift($headerlines)
];
foreach ($headerlines as $headerline) {
$headerbits = explode(':', $headerline, 2);
if (count($headerbits) == 2) {
// Only parse headers having colon separation.
$parsedresponseheaders[$headerbits[0]] = $headerbits[1];
}
}
$response = new http_response(['headers' => $parsedresponseheaders, 'body' => $resbody], intval($info['http_code']));
$resbody = substr($res ?? '', $info['header_size']);
$headers = $this->curlclient->getResponse();
$response = new http_response(['headers' => $headers, 'body' => $resbody], intval($info['http_code']));
if ($response->getStatusCode() >= 400) {
throw new http_exception($response, "An HTTP error status was received: '{$response->getHeaders()['httpstatus']}'");
throw new http_exception($response, "An HTTP error status was received: '".reset($headers)."'");
}
return $response;
}