From 5535dddace815ef5d0bdb42d156656752a67ffe0 Mon Sep 17 00:00:00 2001 From: Zach Borboa Date: Tue, 20 Oct 2026 21:33:06 -0400 Subject: [PATCH] Fix MultiCurl DELETE sending empty body when no data given (#1225) --- src/Curl/MultiCurl.php | 4 +-- tests/PHPCurlClass/PHPMultiCurlClassTest.php | 30 ++++++++++++++++++++ 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/Curl/MultiCurl.php b/src/Curl/MultiCurl.php index 640978a..8be3b30 100644 --- a/src/Curl/MultiCurl.php +++ b/src/Curl/MultiCurl.php @@ -73,9 +73,7 @@ class MultiCurl extends BaseCurl $curl = new Curl($this->baseUrl, $this->options); $this->queueHandle($curl); $this->setUrl($url, $query_parameters); - $curl->setUrl($url, $query_parameters); - $curl->setOpt(CURLOPT_CUSTOMREQUEST, 'DELETE'); - $curl->setOpt(CURLOPT_POSTFIELDS, $curl->buildPostData($data)); + $curl->setDelete($url, $query_parameters, $data); return $curl; } diff --git a/tests/PHPCurlClass/PHPMultiCurlClassTest.php b/tests/PHPCurlClass/PHPMultiCurlClassTest.php index ce2b2ad..b900fd2 100644 --- a/tests/PHPCurlClass/PHPMultiCurlClassTest.php +++ b/tests/PHPCurlClass/PHPMultiCurlClassTest.php @@ -4081,6 +4081,36 @@ class PHPMultiCurlClassTest extends \PHPUnit\Framework\TestCase $this->assertFalse($download_callback_called); } + public function testDeleteContentLengthSetWithBody() + { + $request_body = 'a=1&b=2&c=3'; + $multi_curl = new MultiCurl(); + $multi_curl->setHeader('X-DEBUG-TEST', 'request_method'); + $delete = $multi_curl->addDelete(Test::TEST_URL, [], $request_body); + $multi_curl->start(); + $this->assertEquals(strlen($request_body), $delete->requestHeaders['content-length']); + } + + public function testDeleteContentLengthUnsetWithoutBody() + { + $multi_curl = new MultiCurl(); + $multi_curl->setHeader('X-DEBUG-TEST', 'request_method'); + $delete = $multi_curl->addDelete(Test::TEST_URL, [], []); + $multi_curl->start(); + $this->assertFalse(isset($delete->requestHeaders['content-length'])); + } + + public function testDeleteZeroRequestBody() + { + $multi_curl = new MultiCurl(); + $multi_curl->setTimeout(2); + $multi_curl->setHeader('X-DEBUG-TEST', 'post_json'); + $delete = $multi_curl->addDelete(Test::TEST_URL, [], '0'); + $multi_curl->start(); + $this->assertFalse($delete->error); + $this->assertSame('0', $delete->rawResponse); + } + public function testSetUrlInConstructor() { $data = ['key' => 'value'];