Fix #171: Allow sending body data in delete()

This commit is contained in:
Zach Borboa
2015-04-22 01:18:48 -07:00
parent 7f903ce06b
commit 70be5e4eb3
7 changed files with 42 additions and 9 deletions
+2 -2
View File
@@ -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())
+4 -2
View File
@@ -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();
}
+3 -2
View File
@@ -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;
}
+6 -2
View File
@@ -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;
}
}
+11 -1
View File
@@ -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()
@@ -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) {
+7
View File
@@ -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');