diff --git a/README.md b/README.md index 7a5e779..b924c7b 100644 --- a/README.md +++ b/README.md @@ -275,7 +275,7 @@ Unirest\Request::defaultHeader("Header1", "Value1"); Unirest\Request::defaultHeader("Header2", "Value2"); ``` -You can do set default headers in bulk: +You can set default headers in bulk by passing an array: ```php Unirest\Request::defaultHeaders(array( @@ -288,6 +288,27 @@ You can clear the default headers anytime with: ```php Unirest\Request::clearDefaultHeaders(); + +#### Default cURL Options + +You can set default [cURL options](http://php.net/manual/en/function.curl-setopt.php) that will be sent on every request: + +```php +Unirest\Request::curlOpt(CURLOPT_COOKIE, "foo=bar"); +``` + +You can set options bulk by passing an array: + +```php +Unirest\Request::curlOpts(array( + CURLOPT_COOKIE => "foo=bar" +)); +``` + +You can clear the default options anytime with: + +```php +Unirest\Request::clearCurlOpts(); ``` #### SSL validation diff --git a/src/Unirest/Request.php b/src/Unirest/Request.php index 32bbcbd..77a2821 100644 --- a/src/Unirest/Request.php +++ b/src/Unirest/Request.php @@ -9,6 +9,7 @@ class Request { private static $cookie = null; private static $cookieFile = null; + private static $curlOpts = array(); private static $defaultHeaders = array(); private static $handle = null; private static $jsonOpts = array(); @@ -72,11 +73,7 @@ class Request */ public static function defaultHeaders($headers) { - foreach ($headers as $name => $value) { - self::$defaultHeaders[$name] = $value; - } - - return $headers; + return array_merge(self::$defaultHeaders, $headers); } /** @@ -90,6 +87,43 @@ class Request return self::$defaultHeaders[$name] = $value; } + /** + * Clear all the default headers + */ + public static function clearDefaultHeaders() + { + return self::$defaultHeaders = array(); + } + + /** + * Set curl options to send on every request + * + * @param array $options options array + */ + public static function curlOpts($opts) + { + return array_merge(self::$curlOpts, $opts); + } + + /** + * Set a new default header to send on every request + * + * @param string $name header name + * @param string $value header value + */ + public static function curlOpt($name, $value) + { + return self::$curlOpts[$name] = $value; + } + + /** + * Clear all the default headers + */ + public static function clearCurlOpts() + { + return self::$curlOpts = array(); + } + /** * Set a Mashape key to send on every request as a header * Obtain your Mashape key by browsing one of your Mashape applications on https://www.mashape.com @@ -126,14 +160,6 @@ class Request self::$cookieFile = $cookieFile; } - /** - * Clear all the default headers - */ - public static function clearDefaultHeaders() - { - return self::$defaultHeaders = array(); - } - /** * Set authentication method to use * @@ -350,6 +376,9 @@ class Request { self::$handle = curl_init(); + // start with default options + curl_setopt_array(self::$handle, self::$curlOpts); + if ($method !== Method::GET) { curl_setopt(self::$handle, CURLOPT_CUSTOMREQUEST, $method); @@ -436,9 +465,15 @@ class Request return new Response($httpCode, $body, $header, self::$jsonOpts); } - public static function getInfo() + public static function getInfo($opt = false) { - return curl_getinfo(self::$handle); + if ($opt) { + $info = curl_getinfo(self::$handle, $opt); + } else { + $info = curl_getinfo(self::$handle); + } + + return $info; } public static function getCurlHandle() diff --git a/tests/Unirest/RequestTest.php b/tests/Unirest/RequestTest.php index b10d2eb..f09e4a5 100644 --- a/tests/Unirest/RequestTest.php +++ b/tests/Unirest/RequestTest.php @@ -16,6 +16,17 @@ class UnirestRequestTest extends \PHPUnit_Framework_TestCase $this->assertEquals($result['file'], $file); } + public function testCurlOpts() + { + Unirest\Request::curlOpt(CURLOPT_COOKIE, 'foo=bar'); + + $response = Unirest\Request::get('http://mockbin.com/request'); + + $this->assertTrue(property_exists($response->body->cookies, 'foo')); + + Unirest\Request::clearCurlOpts(); + } + /** * @expectedException Exception */ @@ -23,23 +34,11 @@ class UnirestRequestTest extends \PHPUnit_Framework_TestCase { Unirest\Request::timeout(1); - Unirest\Request::get('http://mockbin.com/delay/3000'); + Unirest\Request::get('http://mockbin.com/delay/1000'); Unirest\Request::timeout(null); // Cleaning timeout for the other tests } -/* - public function testTimeoutSuccess() - { - Unirest\Request::timeout(3); - - $response = Unirest\Request::get('http://mockbin.com/delay/2000'); - $this->assertEquals(200, $response->code); - - Unirest\Request::timeout(null); // Cleaning timeout for the other tests - } -*/ - public function testDefaultHeader() { Unirest\Request::defaultHeader('Hello', 'custom');