diff --git a/README.md b/README.md index 036f1f8..70668b9 100644 --- a/README.md +++ b/README.md @@ -158,7 +158,7 @@ Curl::buildPostData($data) Curl::call() Curl::close() Curl::complete($callback) -Curl::delete($url, $query_parameters = array()) +Curl::delete($url, $query_parameters = array(), $data = array()) Curl::download($url, $mixed_filename) Curl::downloadComplete($fh) Curl::error($callback) @@ -196,7 +196,7 @@ Curl::is_array_assoc($array) Curl::is_array_multidim($array) MultiCurl::__construct($base_url = null) MultiCurl::__destruct() -MultiCurl::addDelete($url, $query_parameters = array()) +MultiCurl::addDelete($url, $query_parameters = array(), $data = array()) MultiCurl::addDownload($url, $mixed_filename) MultiCurl::addGet($url, $data = array()) MultiCurl::addHead($url, $data = array()) diff --git a/src/Curl/Curl.php b/src/Curl/Curl.php index c33b9b1..605fac4 100644 --- a/src/Curl/Curl.php +++ b/src/Curl/Curl.php @@ -146,15 +146,17 @@ class Curl $this->setOpt(CURLOPT_NOPROGRESS, false); } - public function delete($url, $query_parameters = array()) + public function delete($url, $query_parameters = array(), $data = array()) { if (is_array($url)) { + $data = $query_parameters; $query_parameters = $url; $url = $this->base_url; } + $this->setURL($url, $query_parameters); - $this->unsetHeader('Content-Length'); $this->setOpt(CURLOPT_CUSTOMREQUEST, 'DELETE'); + $this->setOpt(CURLOPT_POSTFIELDS, $this->buildPostData($data)); return $this->exec(); } diff --git a/src/Curl/MultiCurl.php b/src/Curl/MultiCurl.php index 6590d83..08332b8 100644 --- a/src/Curl/MultiCurl.php +++ b/src/Curl/MultiCurl.php @@ -27,16 +27,17 @@ class MultiCurl $this->setURL($base_url); } - public function addDelete($url, $query_parameters = array()) + public function addDelete($url, $query_parameters = array(), $data = array()) { if (is_array($url)) { + $data = $query_parameters; $query_parameters = $url; $url = $this->base_url; } $curl = new Curl(); $curl->setURL($url, $query_parameters); - $curl->unsetHeader('Content-Length'); $curl->setOpt(CURLOPT_CUSTOMREQUEST, 'DELETE'); + $curl->setOpt(CURLOPT_POSTFIELDS, $curl->buildPostData($data)); $this->addHandle($curl); return $curl; } diff --git a/tests/PHPCurlClass/Helper.php b/tests/PHPCurlClass/Helper.php index ab38069..c8ac79f 100644 --- a/tests/PHPCurlClass/Helper.php +++ b/tests/PHPCurlClass/Helper.php @@ -15,11 +15,15 @@ class Test $this->curl->setOpt(CURLOPT_SSL_VERIFYHOST, false); } - public function server($test, $request_method, $data = array()) + public function server($test, $request_method, $query_parameters = array(), $data = array()) { $this->curl->setHeader('X-DEBUG-TEST', $test); $request_method = strtolower($request_method); - $this->curl->$request_method(self::TEST_URL, $data); + if (is_array($data) && empty($data)) { + $this->curl->$request_method(self::TEST_URL, $query_parameters); + } else { + $this->curl->$request_method(self::TEST_URL, $query_parameters, $data); + } return $this->curl->response; } } diff --git a/tests/PHPCurlClass/PHPCurlClassTest.php b/tests/PHPCurlClass/PHPCurlClassTest.php index 466b555..8fa6258 100644 --- a/tests/PHPCurlClass/PHPCurlClassTest.php +++ b/tests/PHPCurlClass/PHPCurlClassTest.php @@ -128,7 +128,7 @@ class CurlTest extends PHPUnit_Framework_TestCase $this->assertEquals(Test::TEST_URL, $test->curl->base_url); $this->assertEquals(Test::TEST_URL, $test->curl->url); - // curl -v --get --request DELETE "http://127.0.0.1:8000/" --data "foo=bar" + // curl -v --request DELETE "http://127.0.0.1:8000/?foo=bar" $test = new Test(); $test->server('server', 'DELETE', $data); $this->assertEquals(Test::TEST_URL, $test->curl->base_url); @@ -151,6 +151,12 @@ class CurlTest extends PHPUnit_Framework_TestCase { $data = array('key' => 'value'); + $curl = new Curl(Test::TEST_URL); + $curl->setHeader('X-DEBUG-TEST', 'delete_with_body'); + $curl->delete($data, array('wibble' => 'wubble')); + $this->assertEquals(Test::TEST_URL, $curl->base_url); + $this->assertEquals('{"get":{"key":"value"},"post":{"wibble":"wubble"}}', $curl->raw_response); + $curl = new Curl(Test::TEST_URL); $curl->setHeader('X-DEBUG-TEST', 'get'); $curl->delete($data); @@ -419,6 +425,10 @@ class CurlTest extends PHPUnit_Framework_TestCase 'test' => 'delete', 'key' => 'test', ))); + + $test = new Test(); + $test->server('delete_with_body', 'DELETE', array('foo' => 'bar'), array('wibble' => 'wubble')); + $this->assertEquals('{"get":{"foo":"bar"},"post":{"wibble":"wubble"}}', $test->curl->raw_response); } public function testHeadRequestMethod() diff --git a/tests/PHPCurlClass/PHPMultiCurlClassTest.php b/tests/PHPCurlClass/PHPMultiCurlClassTest.php index 367491b..f7c6430 100644 --- a/tests/PHPCurlClass/PHPMultiCurlClassTest.php +++ b/tests/PHPCurlClass/PHPMultiCurlClassTest.php @@ -1731,6 +1731,15 @@ class MultiCurlTest extends PHPUnit_Framework_TestCase { $data = array('key' => 'value'); + $multi_curl = new MultiCurl(Test::TEST_URL); + $multi_curl->setHeader('X-DEBUG-TEST', 'delete_with_body'); + $multi_curl->addDelete($data, array('wibble' => 'wubble'))->complete(function($instance) { + PHPUnit_Framework_Assert::assertEquals(Test::TEST_URL, $instance->base_url); + PHPUnit_Framework_Assert::assertEquals('{"get":{"key":"value"},"post":{"wibble":"wubble"}}', + $instance->raw_response); + }); + $multi_curl->start(); + $multi_curl = new MultiCurl(Test::TEST_URL); $multi_curl->setHeader('X-DEBUG-TEST', 'get'); $multi_curl->addDelete($data)->complete(function($instance) { diff --git a/tests/PHPCurlClass/server.php b/tests/PHPCurlClass/server.php index b6572e6..a25f544 100644 --- a/tests/PHPCurlClass/server.php +++ b/tests/PHPCurlClass/server.php @@ -223,6 +223,13 @@ if ($test == 'http_basic_auth') { echo 'OK'; exit; +} elseif ($test === 'delete_with_body') { + header('Content-Type: application/json'); + echo json_encode(array( + 'get' => $_GET, + 'post' => $_POST, + )); + exit; } header('Content-Type: text/plain');