Skip to content

Commit 296345b

Browse files
committed
Implement Curl::setCookies()
1 parent de1869b commit 296345b

File tree

3 files changed

+50
-0
lines changed

3 files changed

+50
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ Curl::setCookie($key, $value)
219219
Curl::setCookieFile($cookie_file)
220220
Curl::setCookieJar($cookie_jar)
221221
Curl::setCookieString($string)
222+
Curl::setCookies($cookies)
222223
Curl::setDefaultDecoder($decoder = 'json')
223224
Curl::setDefaultJsonDecoder()
224225
Curl::setDefaultTimeout()

src/Curl/Curl.php

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -728,6 +728,41 @@ public function setCookie($key, $value)
728728
}, array_keys($this->cookies), array_values($this->cookies))));
729729
}
730730

731+
/**
732+
* Set Cookies
733+
*
734+
* @access public
735+
* @param $cookies
736+
*/
737+
public function setCookies($cookies)
738+
{
739+
foreach ($cookies as $key => $value) {
740+
$name_chars = array();
741+
foreach (str_split($key) as $name_char) {
742+
if (!isset($this->rfc2616[$name_char])) {
743+
$name_chars[] = rawurlencode($name_char);
744+
} else {
745+
$name_chars[] = $name_char;
746+
}
747+
}
748+
749+
$value_chars = array();
750+
foreach (str_split($value) as $value_char) {
751+
if (!isset($this->rfc6265[$value_char])) {
752+
$value_chars[] = rawurlencode($value_char);
753+
} else {
754+
$value_chars[] = $value_char;
755+
}
756+
}
757+
758+
$this->cookies[implode('', $name_chars)] = implode('', $value_chars);
759+
}
760+
761+
$this->setOpt(CURLOPT_COOKIE, implode('; ', array_map(function ($k, $v) {
762+
return $k . '=' . $v;
763+
}, array_keys($this->cookies), array_values($this->cookies))));
764+
}
765+
731766
/**
732767
* Get Cookie
733768
*

tests/PHPCurlClass/PHPCurlClassTest.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -962,6 +962,20 @@ public function testSetCookie()
962962
)));
963963
}
964964

965+
public function testSetCookies()
966+
{
967+
$cookies = array(
968+
'mycookie' => 'yum',
969+
'fruit' => 'apple',
970+
'color' => 'red',
971+
);
972+
$test = new Test();
973+
$test->curl->setCookies($cookies);
974+
$test->server('cookie', 'GET');
975+
976+
$this->assertEquals(http_build_query($cookies, '', '&'), $test->curl->response);
977+
}
978+
965979
public function testSetCookieEncodingSpace()
966980
{
967981
$curl = new Curl();

0 commit comments

Comments
 (0)