JSON Decoding options
- users can now specify all the json_decode params to be used - additional method added: `Unirest\Request::defaultHeaders`
This commit is contained in:
21
README.md
21
README.md
@@ -146,6 +146,17 @@ Upon recieving a response Unirest returns the result in the form of an Object, t
|
|||||||
|
|
||||||
You can set some advanced configuration to tune Unirest-PHP:
|
You can set some advanced configuration to tune Unirest-PHP:
|
||||||
|
|
||||||
|
#### Custom JSON Decode Flags
|
||||||
|
|
||||||
|
Unirest uses PHP's [JSON Extension](http://php.net/manual/en/book.json.php) for automatically decoding JSON responses.
|
||||||
|
sometime you may want to return associative arrays, limit the depth of recursion, or use any of the [customization flags](http://php.net/manual/en/json.constants.php#constant.json-hex-tag).
|
||||||
|
|
||||||
|
To do so, simply set the desired options using the `jsonOpts` request method:
|
||||||
|
|
||||||
|
```php
|
||||||
|
Unirest\Request::jsonOpts(true, 512, JSON_NUMERIC_CHECK & JSON_FORCE_OBJECT & JSON_UNESCAPED_SLASHES);
|
||||||
|
```
|
||||||
|
|
||||||
#### Timeout
|
#### Timeout
|
||||||
|
|
||||||
You can set a custom timeout value (in **seconds**):
|
You can set a custom timeout value (in **seconds**):
|
||||||
@@ -163,6 +174,14 @@ Unirest\Request::defaultHeader("Header1", "Value1");
|
|||||||
Unirest\Request::defaultHeader("Header2", "Value2");
|
Unirest\Request::defaultHeader("Header2", "Value2");
|
||||||
```
|
```
|
||||||
|
|
||||||
|
You can do set default headers in bulk:
|
||||||
|
|
||||||
|
```php
|
||||||
|
Unirest\Request::defaultHeaders(array(
|
||||||
|
"Header1" => "Value1",
|
||||||
|
"Header2" => "Value2"
|
||||||
|
));
|
||||||
|
|
||||||
You can clear the default headers anytime with:
|
You can clear the default headers anytime with:
|
||||||
|
|
||||||
```php
|
```php
|
||||||
@@ -186,7 +205,7 @@ Licensed under [the MIT license](https://github.com/Mashape/unirest-php/blob/mas
|
|||||||
Created with love by [Mashape](https://www.mashape.com/).
|
Created with love by [Mashape](https://www.mashape.com/).
|
||||||
|
|
||||||
[gitter-url]: https://gitter.im/Mashape/unirest-php
|
[gitter-url]: https://gitter.im/Mashape/unirest-php
|
||||||
[gitter-image]: https://badges.gitter.im/Mashape.png
|
[gitter-image]: https://badges.gitter.im/Join%20Chat.svg
|
||||||
|
|
||||||
[composer-url]: http://badge.fury.io/ph/mashape%2Funirest-php
|
[composer-url]: http://badge.fury.io/ph/mashape%2Funirest-php
|
||||||
[composer-image]: https://badge.fury.io/ph/mashape%2Funirest-php.svg
|
[composer-image]: https://badge.fury.io/ph/mashape%2Funirest-php.svg
|
||||||
|
|||||||
@@ -7,36 +7,66 @@ use Unirest\Response;
|
|||||||
|
|
||||||
class Request
|
class Request
|
||||||
{
|
{
|
||||||
|
private static $jsonOpts = array();
|
||||||
private static $verifyPeer = true;
|
private static $verifyPeer = true;
|
||||||
private static $socketTimeout = null;
|
private static $socketTimeout = null;
|
||||||
private static $defaultHeaders = array();
|
private static $defaultHeaders = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set JSON decode mode
|
||||||
|
*
|
||||||
|
* @param bool $assoc When TRUE, returned objects will be converted into associative arrays.
|
||||||
|
* @param bool $depth User specified recursion depth.
|
||||||
|
* @param bool $options Bitmask of JSON decode options. Currently only JSON_BIGINT_AS_STRING is supported (default is to cast large integers as floats)
|
||||||
|
*/
|
||||||
|
public static function jsonOpts($assoc = false, $depth = 512, $options = 0)
|
||||||
|
{
|
||||||
|
return self::$jsonOpts = array($assoc, $depth, $options);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Verify SSL peer
|
* Verify SSL peer
|
||||||
|
*
|
||||||
* @param bool $enabled enable SSL verification, by default is true
|
* @param bool $enabled enable SSL verification, by default is true
|
||||||
*/
|
*/
|
||||||
public static function verifyPeer($enabled)
|
public static function verifyPeer($enabled)
|
||||||
{
|
{
|
||||||
self::$verifyPeer = $enabled;
|
return self::$verifyPeer = $enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set a timeout
|
* Set a timeout
|
||||||
|
*
|
||||||
* @param integer $seconds timeout value in seconds
|
* @param integer $seconds timeout value in seconds
|
||||||
*/
|
*/
|
||||||
public static function timeout($seconds)
|
public static function timeout($seconds)
|
||||||
{
|
{
|
||||||
self::$socketTimeout = $seconds;
|
return self::$socketTimeout = $seconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set default headers to send on every request
|
||||||
|
*
|
||||||
|
* @param array $headers headers array
|
||||||
|
*/
|
||||||
|
public static function defaultHeaders($headers)
|
||||||
|
{
|
||||||
|
foreach ($headers as $name => $value) {
|
||||||
|
self::$defaultHeaders[$name] = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $headers;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set a new default header to send on every request
|
* Set a new default header to send on every request
|
||||||
|
*
|
||||||
* @param string $name header name
|
* @param string $name header name
|
||||||
* @param string $value header value
|
* @param string $value header value
|
||||||
*/
|
*/
|
||||||
public static function defaultHeader($name, $value)
|
public static function defaultHeader($name, $value)
|
||||||
{
|
{
|
||||||
self::$defaultHeaders[$name] = $value;
|
return self::$defaultHeaders[$name] = $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -44,11 +74,12 @@ class Request
|
|||||||
*/
|
*/
|
||||||
public static function clearDefaultHeaders()
|
public static function clearDefaultHeaders()
|
||||||
{
|
{
|
||||||
self::$defaultHeaders = array();
|
return self::$defaultHeaders = array();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send a GET request to a URL
|
* Send a GET request to a URL
|
||||||
|
*
|
||||||
* @param string $url URL to send the GET request to
|
* @param string $url URL to send the GET request to
|
||||||
* @param array $headers additional headers to send
|
* @param array $headers additional headers to send
|
||||||
* @param mixed $parameters parameters to send in the querystring
|
* @param mixed $parameters parameters to send in the querystring
|
||||||
@@ -286,7 +317,7 @@ class Request
|
|||||||
$body = substr($response, $header_size);
|
$body = substr($response, $header_size);
|
||||||
$httpCode = $curl_info['http_code'];
|
$httpCode = $curl_info['http_code'];
|
||||||
|
|
||||||
return new Response($httpCode, $body, $header);
|
return new Response($httpCode, $body, $header, self::$jsonOpts);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function getArrayFromQuerystring($query)
|
private static function getArrayFromQuerystring($query)
|
||||||
|
|||||||
@@ -13,14 +13,19 @@ class Response
|
|||||||
* @param int $code response code of the cURL request
|
* @param int $code response code of the cURL request
|
||||||
* @param string $raw_body the raw body of the cURL response
|
* @param string $raw_body the raw body of the cURL response
|
||||||
* @param string $headers raw header string from 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)
|
public function __construct($code, $raw_body, $headers, $json_args = array())
|
||||||
{
|
{
|
||||||
$this->code = $code;
|
$this->code = $code;
|
||||||
$this->headers = $this->parseHeaders($headers);
|
$this->headers = $this->parseHeaders($headers);
|
||||||
$this->raw_body = $raw_body;
|
$this->raw_body = $raw_body;
|
||||||
$this->body = $raw_body;
|
$this->body = $raw_body;
|
||||||
$json = json_decode($raw_body);
|
|
||||||
|
// make sure raw_body is the first argument
|
||||||
|
array_unshift($json_args, $raw_body);
|
||||||
|
|
||||||
|
$json = call_user_func_array('json_decode', $json_args);
|
||||||
|
|
||||||
if (json_last_error() === JSON_ERROR_NONE) {
|
if (json_last_error() === JSON_ERROR_NONE) {
|
||||||
$this->body = $json;
|
$this->body = $json;
|
||||||
|
|||||||
28
tests/Unirest/ResponseTest.php
Normal file
28
tests/Unirest/ResponseTest.php
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class UnirestResponseTest extends \PHPUnit_Framework_TestCase
|
||||||
|
{
|
||||||
|
public function testJSONAssociativeArrays()
|
||||||
|
{
|
||||||
|
$opts = Unirest\Request::jsonOpts(true);
|
||||||
|
$response = new Unirest\Response(200, '{"a":1,"b":2,"c":3,"d":4,"e":5}', '', $opts);
|
||||||
|
|
||||||
|
$this->assertEquals($response->body['a'], 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testJSONAObjects()
|
||||||
|
{
|
||||||
|
$opts = Unirest\Request::jsonOpts(false);
|
||||||
|
$response = new Unirest\Response(200, '{"a":1,"b":2,"c":3,"d":4,"e":5}', '', $opts);
|
||||||
|
|
||||||
|
$this->assertEquals($response->body->a, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testJSONOpts()
|
||||||
|
{
|
||||||
|
$opts = Unirest\Request::jsonOpts(false, 512, JSON_NUMERIC_CHECK);
|
||||||
|
$response = new Unirest\Response(200, '{"number": 1234567890}', '', $opts);
|
||||||
|
|
||||||
|
$this->assertSame($response->body->number, 1234567890);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user