. * * @author Spencer Mortensen * @license http://www.gnu.org/licenses/lgpl-3.0.html LGPL-3.0 * @copyright 2015 Datto, Inc. */ namespace Datto\JsonRpc\Http; class HttpResponse { /** @var string */ private $version; /** @var integer */ private $code; /** @var string */ private $message; /** @var array */ private $headers; public static function fromHttpResponseHeader(array $http_response_header) { $statusLine = array_shift($http_response_header); self::readVersionCodeMessage($statusLine, $version, $code, $message); self::readHeaders($http_response_header, $headers); return new self($version, $code, $message, $headers); } public function __construct(string $version, int $code, string $message, array $headers) { $this->version = $version; $this->code = $code; $this->message = $message; $this->headers = $headers; } public function getVersion() { return $this->version; } public function getCode() { return $this->code; } public function getMessage() { return $this->message; } public function getHeaders() { return $this->headers; } private static function readVersionCodeMessage($input, &$version, &$code, &$message) { if (preg_match("~HTTP/(?[0-9.]+) (?[0-9]+) ?(?.*)~XDs", $input, $match) === 1) { $version = $match['version']; $code = (integer)$match['code']; $message = $match['message']; } } private static function readHeaders(array $http_response_header, &$headers) { $headers = array(); foreach ($http_response_header as $header) { list($name, $value) = explode(':', $header, 2); $headers[$name] = trim($value); } return $headers; } }