79 lines
2.4 KiB
PHP
79 lines
2.4 KiB
PHP
<?php
|
|
|
|
namespace Unirest;
|
|
|
|
class Response
|
|
{
|
|
public $code;
|
|
public $raw_body;
|
|
public $body;
|
|
public $headers;
|
|
|
|
/**
|
|
* @param int $code response code of the cURL request
|
|
* @param string $raw_body the raw body of the cURL response
|
|
* @param string $headers raw header string from cURL response
|
|
* @param array $json_args arguments to pass to json_decode function
|
|
*/
|
|
public function __construct($code, $raw_body, $headers, $json_args = array())
|
|
{
|
|
$this->code = $code;
|
|
$this->headers = $this->parseHeaders($headers);
|
|
$this->raw_body = $raw_body;
|
|
$this->body = $raw_body;
|
|
|
|
// make sure raw_body is the first argument
|
|
array_unshift($json_args, $raw_body);
|
|
|
|
if (function_exists('json_decode')) {
|
|
$json = call_user_func_array('json_decode', $json_args);
|
|
|
|
if (json_last_error() === JSON_ERROR_NONE) {
|
|
$this->body = $json;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* if PECL_HTTP is not available use a fall back function
|
|
*
|
|
* thanks to ricardovermeltfoort@gmail.com
|
|
* http://php.net/manual/en/function.http-parse-headers.php#112986
|
|
* @param string $raw_headers raw headers
|
|
* @return array
|
|
*/
|
|
private function parseHeaders($raw_headers)
|
|
{
|
|
if (function_exists('http_parse_headers')) {
|
|
return http_parse_headers($raw_headers);
|
|
} else {
|
|
$key = '';
|
|
$headers = array();
|
|
|
|
foreach (explode("\n", $raw_headers) as $i => $h) {
|
|
$h = explode(':', $h, 2);
|
|
|
|
if (isset($h[1])) {
|
|
if (!isset($headers[$h[0]])) {
|
|
$headers[$h[0]] = trim($h[1]);
|
|
} elseif (is_array($headers[$h[0]])) {
|
|
$headers[$h[0]] = array_merge($headers[$h[0]], array(trim($h[1])));
|
|
} else {
|
|
$headers[$h[0]] = array_merge(array($headers[$h[0]]), array(trim($h[1])));
|
|
}
|
|
|
|
$key = $h[0];
|
|
} else {
|
|
if (substr($h[0], 0, 1) == "\t") {
|
|
$headers[$key] .= "\r\n\t".trim($h[0]);
|
|
} elseif (!$key) {
|
|
$headers[0] = trim($h[0]);
|
|
}
|
|
}
|
|
}
|
|
|
|
return $headers;
|
|
}
|
|
}
|
|
}
|