diff --git a/README.md b/README.md index 2ecc1a9..3bf082c 100644 --- a/README.md +++ b/README.md @@ -219,6 +219,7 @@ Curl::setCookie($key, $value) Curl::setCookieFile($cookie_file) Curl::setCookieJar($cookie_jar) Curl::setCookieString($string) +Curl::setCookies($cookies) Curl::setDefaultDecoder($decoder = 'json') Curl::setDefaultJsonDecoder() Curl::setDefaultTimeout() diff --git a/src/Curl/Curl.php b/src/Curl/Curl.php index 362a85c..3e63340 100644 --- a/src/Curl/Curl.php +++ b/src/Curl/Curl.php @@ -728,6 +728,41 @@ class Curl }, array_keys($this->cookies), array_values($this->cookies)))); } + /** + * Set Cookies + * + * @access public + * @param $cookies + */ + public function setCookies($cookies) + { + foreach ($cookies as $key => $value) { + $name_chars = array(); + foreach (str_split($key) as $name_char) { + if (!isset($this->rfc2616[$name_char])) { + $name_chars[] = rawurlencode($name_char); + } else { + $name_chars[] = $name_char; + } + } + + $value_chars = array(); + foreach (str_split($value) as $value_char) { + if (!isset($this->rfc6265[$value_char])) { + $value_chars[] = rawurlencode($value_char); + } else { + $value_chars[] = $value_char; + } + } + + $this->cookies[implode('', $name_chars)] = implode('', $value_chars); + } + + $this->setOpt(CURLOPT_COOKIE, implode('; ', array_map(function ($k, $v) { + return $k . '=' . $v; + }, array_keys($this->cookies), array_values($this->cookies)))); + } + /** * Get Cookie * diff --git a/tests/PHPCurlClass/PHPCurlClassTest.php b/tests/PHPCurlClass/PHPCurlClassTest.php index ffdc26d..b9f3987 100644 --- a/tests/PHPCurlClass/PHPCurlClassTest.php +++ b/tests/PHPCurlClass/PHPCurlClassTest.php @@ -962,6 +962,20 @@ class CurlTest extends PHPUnit_Framework_TestCase ))); } + public function testSetCookies() + { + $cookies = array( + 'mycookie' => 'yum', + 'fruit' => 'apple', + 'color' => 'red', + ); + $test = new Test(); + $test->curl->setCookies($cookies); + $test->server('cookie', 'GET'); + + $this->assertEquals(http_build_query($cookies, '', '&'), $test->curl->response); + } + public function testSetCookieEncodingSpace() { $curl = new Curl();