/** */ public static function createFromRawResponse($rawResponse) { $response = new self($rawResponse); $lines = preg_split('/(\\r?\\n)/', $rawResponse); for ($i = 0; $i < count($lines); $i++) { if (0 == $i) { preg_match('/^HTTP\\/(\\d\\.\\d)\\s(\\d+)\\s(.+)/', $lines[$i], $statusLine); $response->setStatusCode($statusCode = $statusLine[2]); continue; } if (empty($lines[$i])) { $body = array_slice($lines, $i + 1); $response->setBody(implode("\n", $body)); break; } if (strpos($lines[$i], ':')) { $headerParts = explode(':', $lines[$i]); $response->setHeader($headerParts[0], $headerParts[1]); } } return $response; }
/** * Create an instance from an input string. * @param string $str the stringified response * @return \vakata\http\Response the response instance * @codeCoverageIgnore */ public static function fromString($str) { $res = new self(); $break = strpos($str, "\r\n\r\n") === false ? "\n" : "\r\n"; // just in case someone breaks RFC 2616 list($headers, $message) = explode($break . $break, (string) $str, 2); $headers = explode($break, preg_replace("(" . $break . "\\s+)", " ", $headers)); if (isset($headers[0]) && substr($headers[0], 0, 5) === 'HTTP/') { $temp = explode(' ', substr($headers[0], 5)); $res->setProtocolVersion($temp[0]); $res->setStatusCode((int) $temp[1]); unset($headers[0]); $headers = array_values($headers); } foreach (array_filter($headers) as $v) { $v = explode(':', $v, 2); $res->setHeader(trim($v[0]), trim($v[1])); } $res->setBody($message); $res->removeHeader('Content-Length'); $res->removeHeader('Transfer-Encoding'); return $res; }
public static function create(\Exception $exception, $statusCode = null, array $headers = array()) { $e = new self(); $e->setMessage($exception->getMessage()); $e->setCode($exception->getCode()); if (null === $statusCode) { $statusCode = 500; } $e->setStatusCode($statusCode); $e->setHeaders($headers); $e->setTraceFromException($exception); $e->setClass(get_class($exception)); $e->setFile($exception->getFile()); $e->setLine($exception->getLine()); if ($exception->getPrevious()) { $e->setPrevious(self::create($exception->getPrevious())); } return $e; }
/** * {@inheritdoc} */ public static function fromArray(array $values) { $message = new self(); $values = array_merge(['status_code' => null, 'request_id' => null, 'requests' => [], 'platform_requests' => [], 'latitude' => null, 'longitude' => null, 'accuracy' => null, 'auth_info' => null, 'auth_ticket' => null, 'ms_since_last_locationfix' => null], $values); $message->setStatusCode($values['status_code']); $message->setRequestId($values['request_id']); $message->setLatitude($values['latitude']); $message->setLongitude($values['longitude']); $message->setAccuracy($values['accuracy']); $message->setAuthInfo($values['auth_info']); $message->setAuthTicket($values['auth_ticket']); $message->setMsSinceLastLocationfix($values['ms_since_last_locationfix']); foreach ($values['requests'] as $item) { $message->addRequests($item); } foreach ($values['platform_requests'] as $item) { $message->addPlatformRequests($item); } return $message; }
/** * {@inheritdoc} */ public static function fromArray(array $values) { $message = new self(); $values = array_merge(['status_code' => null, 'request_id' => null, 'api_url' => null, 'platform_returns' => [], 'auth_ticket' => null, 'returns' => [], 'error' => null], $values); $message->setStatusCode($values['status_code']); $message->setRequestId($values['request_id']); $message->setApiUrl($values['api_url']); $message->setAuthTicket($values['auth_ticket']); $message->setError($values['error']); foreach ($values['platform_returns'] as $item) { $message->addPlatformReturns($item); } foreach ($values['returns'] as $item) { $message->addReturns($item); } return $message; }
/** * Construct the HttpResponse from a file, you can create the * dumps from actual traffic using "curl -i http://www.example.org > dump.txt" */ public static function fromFile($file) { $data = @file_get_contents($file); if (FALSE === $data) { throw new HttpResponseException("unable to read file"); } $response = new self(); // separate the headers from the content list($headerLines, $contentData) = explode("\r\n\r\n", $data); $headerLinesArray = explode("\r\n", $headerLines); // First header is HTTP response code, e.g.: HTTP/1.1 200 OK $responseCode = substr($headerLinesArray[0], 9, 3); $response->setStatusCode($responseCode); unset($headerLinesArray[0]); foreach ($headerLinesArray as $headerLine) { list($k, $v) = explode(":", $headerLine); $response->setHeader(trim($k), trim($v)); } $response->setContent($contentData); return $response; }