private function parseResponse()

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;
    }