in src/Client/Curl.php [161:195]
private function parseResponse(string $response): array
{
$lines = explode(self::HTTP_SPEC_CRLF, $response);
$output = [
'http-version' => '',
'status-code' => 200,
'reason-phrase' => '',
'headers' => [],
'body' => ''
];
foreach ($lines as $i => $line) {
// status-line
// @see https://datatracker.ietf.org/doc/html/rfc7230#section-3.1.2
if ($i === 0) {
$statusLine = explode(self::HTTP_SPEC_SP, $line, 3);
$output['http-version'] = explode('/', $statusLine[0], 2)[1];
$output['status-code'] = (int) $statusLine[1];
$output['reason-phrase'] = $statusLine[2];
continue;
}
// Empty line, end of headers
if (empty($line)) {
$output['body'] = $lines[$i+1] ?? '';
break;
}
// Extract header name and values
[$name, $value] = explode(':', $line, 2);
if (!isset($output['headers'][$name])) {
$output['headers'][$name]= [$value];
} else {
$output['headers'][$name][]= $value;
}
}
return $output;
}