Neos\Flow\Http\Response::createFromRaw PHP Method

createFromRaw() public static method

Creates a response from the given raw, that is plain text, HTTP response.
public static createFromRaw ( string $rawResponse, Response $parentResponse = null ) : Response
$rawResponse string
$parentResponse Response Parent response, if called recursively
return Response
    public static function createFromRaw($rawResponse, Response $parentResponse = null)
    {
        $response = new static($parentResponse);
        $lines = explode(chr(10), $rawResponse);
        $statusLine = array_shift($lines);
        if (substr($statusLine, 0, 5) !== 'HTTP/') {
            throw new \InvalidArgumentException('The given raw HTTP message is not a valid response.', 1335175601);
        }
        list($version, $statusCode, $reasonPhrase) = explode(' ', $statusLine, 3);
        $response->setVersion($version);
        $response->setStatus((int) $statusCode, trim($reasonPhrase));
        $parsingHeader = true;
        $contentLines = [];
        $headers = new Headers();
        foreach ($lines as $line) {
            if ($parsingHeader) {
                if (trim($line) === '') {
                    $parsingHeader = false;
                    continue;
                }
                $fieldName = trim(substr($line, 0, strpos($line, ':')));
                $fieldValue = trim(substr($line, strlen($fieldName) + 1));
                if (strtoupper(substr($fieldName, 0, 10)) === 'SET-COOKIE') {
                    $cookie = Cookie::createFromRawSetCookieHeader($fieldValue);
                    if ($cookie !== null) {
                        $headers->setCookie($cookie);
                    }
                } else {
                    $headers->set($fieldName, $fieldValue, false);
                }
            } else {
                $contentLines[] = $line;
            }
        }
        $content = implode(chr(10), $contentLines);
        $response->setHeaders($headers);
        $response->setContent($content);
        return $response;
    }

Usage Example

 /**
  * @param string $output
  * @param Runtime $typoScriptRuntime
  * @return string The message body without the message head
  */
 protected function mergeHttpResponseFromOutput($output, Runtime $typoScriptRuntime)
 {
     if (substr($output, 0, 5) === 'HTTP/') {
         $endOfHeader = strpos($output, "\r\n\r\n");
         if ($endOfHeader !== false) {
             $header = substr($output, 0, $endOfHeader + 4);
             try {
                 $renderedResponse = Response::createFromRaw($header);
                 /** @var Response $response */
                 $response = $typoScriptRuntime->getControllerContext()->getResponse();
                 $response->setStatus($renderedResponse->getStatusCode());
                 foreach ($renderedResponse->getHeaders()->getAll() as $headerName => $headerValues) {
                     $response->setHeader($headerName, $headerValues[0]);
                 }
                 $output = substr($output, strlen($header));
             } catch (\InvalidArgumentException $exception) {
             }
         }
     }
     return $output;
 }
All Usage Examples Of Neos\Flow\Http\Response::createFromRaw