Fix MultiCurl::setCookieString()

This commit is contained in:
Zach Borboa
2022-11-05 14:43:21 -07:00
parent ca46c41733
commit 99795d1d69
2 changed files with 75 additions and 5 deletions
+8 -5
View File
@@ -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))));
}
}
/**
@@ -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 ([