Back to CurlTransport class

Method getResponse

protected \Joomla\CMS\Http\Response
getResponse
(mixed $content, mixed $info)
Method to get a response object from a server response.
Parameters
  • string $content The complete server response, including headers as a string if the response has no errors.
  • array $info The cURL request information.
Returns
  • \Joomla\CMS\Http\Response
Since
  • 1.7.3
-
  • \Joomla\Http\Exception\InvalidResponseCodeException
Class: CurlTransport
Project: Joomla

Method getResponse - Source code

/**
 * Method to get a response object from a server response.
 *
 * @param   string  $content  The complete server response, including headers
 *                            as a string if the response has no errors.
 * @param   array   $info     The cURL request information.
 *
 * @return  Response
 *
 * @since   1.7.3
 * @throws  InvalidResponseCodeException
 */
protected function getResponse($content, $info)
{
    // Try to get header size
    if (isset($info['header_size'])) {
        $headerString = trim(substr($content, 0, $info['header_size']));
        $headerArray = explode("\r\n\r\n", $headerString);
        // Get the last set of response headers as an array.
        $headers = explode("\r\n", array_pop($headerArray));
        // Set the body for the response.
        $body = substr($content, $info['header_size']);
    } else {
        // Get the number of redirects that occurred.
        $redirects = $info['redirect_count'] ?? 0;
        /*
         * Split the response into headers and body. If cURL encountered redirects, the headers for the redirected requests will
         * also be included. So we split the response into header + body + the number of redirects and only use the last two
         * sections which should be the last set of headers and the actual body.
         */
        $response = explode("\r\n\r\n", $content, 2 + $redirects);
        // Set the body for the response.
        $body = array_pop($response);
        // Get the last set of response headers as an array.
        $headers = explode("\r\n", array_pop($response));
    }
    // Get the response code from the first offset of the response headers.
    preg_match('/[0-9]{3}/', array_shift($headers), $matches);
    $code = \count($matches) ? $matches[0] : null;
    if (!is_numeric($code)) {
        // No valid response code was detected.
        throw new InvalidResponseCodeException('No HTTP response code found.');
    }
    $statusCode = (int) $code;
    $verifiedHeaders = $this->processHeaders($headers);
    $streamInterface = new StreamResponse('php://memory', 'rw');
    $streamInterface->write($body);
    return new Response($streamInterface, $statusCode, $verifiedHeaders);
}