src/Http/Response.php
public static function parse($message, $options = [])
    {
        $parts = explode("\r\n\r\n", $message, 2);
        if (count($parts) < 2) {
            throw new NetException("The CRLFCRLF separator between headers and body is missing.");
        }
        $response = new static($options + ['format' => null]);

        list($header, $body) = $parts;

        $data = str_replace("\r", '', explode("\n", $header));
        $data = array_filter($data);

        preg_match('/HTTP\/(\d+\.\d+)\s+(\d+)(?:\s+(.*))?/i', array_shift($data), $matches);

        $headers = $response->headers();
        $headers->push($data);

        if ($matches) {
            $response->version($matches[1]);
            $response->status([$matches[2], isset($matches[3]) ? $matches[3] : '']);
        }

        if ($headers['Transfer-Encoding']->value() === 'chunked') {
            $decoded = '';
            while (!empty($body)) {
                $pos = strpos($body, "\r\n");
                $len = hexdec(substr($body, 0, $pos));
                $decoded .= substr($body, $pos + 2, $len);
                $body = substr($body, $pos + 2 + $len);
            }
            $body = $decoded;
        }

        $response->body($body);
        return $response;
    }
public static function parse($message, $options = [])
    {
        $parts = explode("\r\n\r\n", $message, 2);
        if (count($parts) < 2) {
            throw new NetException("The CRLFCRLF separator between headers and body is missing.");
        }
        $response = new static($options + ['format' => null]);

        list($header, $body) = $parts;

        $data = str_replace("\r", '', explode("\n", $header));
        $data = array_filter($data);

        preg_match('/HTTP\/(\d+\.\d+)\s+(\d+)(?:\s+(.*))?/i', array_shift($data), $matches);

        $headers = $response->headers();
        $headers->push($data);

        if ($matches) {
            $response->version($matches[1]);
            $response->status([$matches[2], isset($matches[3]) ? $matches[3] : '']);
        }

        if ($headers['Transfer-Encoding']->value() === 'chunked') {
            $decoded = '';
            while (!empty($body)) {
                $pos = strpos($body, "\r\n");
                $len = hexdec(substr($body, 0, $pos));
                $decoded .= substr($body, $pos + 2, $len);
                $body = substr($body, $pos + 2 + $len);
            }
            $body = $decoded;
        }

        $response->body($body);
        return $response;
    }
public static function parse ( $ message , $ options = [ ] ) { $ parts = explode ( "\r\n\r\n" , $ message , 2 ) ; if ( count ( $ parts ) < 2 ) { throw new NetException ( "The CRLFCRLF separator between headers and body is missing." ) ; } $ response = new static ( $ options + [ 'format' => null ] ) ; list ( $ header , $ body ) = $ parts ; $ data = str_replace ( "\r" , '' , explode ( "\n" , $ header ) ) ; $ data = array_filter ( $ data ) ; preg_match ( '/HTTP\/(\d+\.\d+)\s+(\d+)(?:\s+(.*))?/i' , array_shift ( $ data ) , $ matches ) ; $ headers = $ response -> headers ( ) ; $ headers -> push ( $ data ) ; if ( $ matches ) { $ response -> version ( $ matches [ 1 ] ) ; $ response -> status ( [ $ matches [ 2 ] , isset ( $ matches [ 3 ] ) ? $ matches [ 3 ] : '' ] ) ; } if ( $ headers [ 'Transfer-Encoding' ] -> value ( ) === 'chunked' ) { $ decoded = '' ; while ( ! empty ( $ body ) ) { $ pos = strpos ( $ body , "\r\n" ) ; $ len = hexdec ( substr ( $ body , 0 , $ pos ) ) ; $ decoded .= substr ( $ body , $ pos + 2 , $ len ) ; $ body = substr ( $ body , $ pos + 2 + $ len ) ; } $ body = $ decoded ; } $ response -> body ( $ body ) ; return $ response ; }
Creates a response instance from an entire HTTP message including HTTP status headers and body.

@param  string $message The full HTTP message.
@param  string $options Additionnal options.
@return object          Returns a request instance.
Creates a response instance from an entire HTTP message including HTTP status headers and body .