diff --git a/src/Curl/Curl.php b/src/Curl/Curl.php index 0f8f921..3676b9e 100644 --- a/src/Curl/Curl.php +++ b/src/Curl/Curl.php @@ -1936,11 +1936,14 @@ class Curl */ private function buildCookies() { - // Avoid using http_build_query() as unnecessary encoding is performed. - // http_build_query($this->cookies, '', '; '); - $this->setOpt(CURLOPT_COOKIE, implode('; ', array_map(function ($k, $v) { - return $k . '=' . $v; - }, array_keys($this->cookies), array_values($this->cookies)))); + // Avoid changing CURLOPT_COOKIE if there are no cookies set. + if (count($this->cookies)) { + // Avoid using http_build_query() as unnecessary encoding is performed. + // http_build_query($this->cookies, '', '; '); + $this->setOpt(CURLOPT_COOKIE, implode('; ', array_map(function ($k, $v) { + return $k . '=' . $v; + }, array_keys($this->cookies), array_values($this->cookies)))); + } } /** diff --git a/tests/PHPCurlClass/PHPMultiCurlClassTest.php b/tests/PHPCurlClass/PHPMultiCurlClassTest.php index 11d66b9..9ec5cc7 100644 --- a/tests/PHPCurlClass/PHPMultiCurlClassTest.php +++ b/tests/PHPCurlClass/PHPMultiCurlClassTest.php @@ -2310,6 +2310,73 @@ class MultiCurlTest extends \PHPUnit\Framework\TestCase $this->assertEquals('yummy', $get_2->responseCookies['mycookie']); } + public function testSetCookieStringMultiCurl() + { + $cookie_string = 'fruit=apple; color=red'; + + $multi_curl = new MultiCurl(); + $multi_curl->setHeader('X-DEBUG-TEST', 'cookie'); + $multi_curl->setCookieString($cookie_string); + + $get_1 = $multi_curl->addGet(Test::TEST_URL); + $get_1->complete(function ($instance) use ($cookie_string) { + \PHPUnit\Framework\Assert::assertEquals('fruit=apple&color=red', $instance->response); + \PHPUnit\Framework\Assert::assertEquals($cookie_string, $instance->getOpt(CURLOPT_COOKIE)); + }); + + $multi_curl->start(); + } + + public function testSetCookieStringCurl() + { + $cookie_string = 'fruit=apple; color=red'; + + $multi_curl = new MultiCurl(); + $multi_curl->setHeader('X-DEBUG-TEST', 'cookie'); + + $get_1 = $multi_curl->addGet(Test::TEST_URL); + $get_1->setCookieString($cookie_string); + $get_1->complete(function ($instance) use ($cookie_string) { + \PHPUnit\Framework\Assert::assertEquals('fruit=apple&color=red', $instance->response); + \PHPUnit\Framework\Assert::assertEquals($cookie_string, $instance->getOpt(CURLOPT_COOKIE)); + }); + + $multi_curl->start(); + } + + public function testSetCookieString() + { + $cookie_string_1 = 'fruit=apple; color=red'; + $cookie_string_2 = 'fruit=banana; color=yellow'; + $cookie_string_3 = 'fruit=orange; color=orange'; + + $multi_curl = new MultiCurl(); + $multi_curl->setHeader('X-DEBUG-TEST', 'cookie'); + $multi_curl->setCookieString($cookie_string_1); + + $get_1 = $multi_curl->addGet(Test::TEST_URL); + $get_1->complete(function ($instance) use ($cookie_string_1) { + \PHPUnit\Framework\Assert::assertEquals('fruit=apple&color=red', $instance->response); + \PHPUnit\Framework\Assert::assertEquals($cookie_string_1, $instance->getOpt(CURLOPT_COOKIE)); + }); + + $get_2 = $multi_curl->addGet(Test::TEST_URL); + $get_2->setCookieString($cookie_string_2); + $get_2->complete(function ($instance) use ($cookie_string_2) { + \PHPUnit\Framework\Assert::assertEquals('fruit=banana&color=yellow', $instance->response); + \PHPUnit\Framework\Assert::assertEquals($cookie_string_2, $instance->getOpt(CURLOPT_COOKIE)); + }); + + $get_3 = $multi_curl->addGet(Test::TEST_URL); + $get_3->setCookieString($cookie_string_3); + $get_3->complete(function ($instance) use ($cookie_string_3) { + \PHPUnit\Framework\Assert::assertEquals('fruit=orange&color=orange', $instance->response); + \PHPUnit\Framework\Assert::assertEquals($cookie_string_3, $instance->getOpt(CURLOPT_COOKIE)); + }); + + $multi_curl->start(); + } + public function testJsonRequest() { foreach ([