PHP CURL DELETE request PHP CURL DELETE request curl curl

PHP CURL DELETE request


I finally solved this myself. If anyone else is having this problem, here is my solution:

I created a new method:

public function curl_del($path){    $url = $this->__url.$path;    $ch = curl_init();    curl_setopt($ch, CURLOPT_URL, $url);    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");    $result = curl_exec($ch);    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);    curl_close($ch);    return $result;}

Update 2

Since this seems to help some people, here is my final curl DELETE method, which returns the HTTP response in JSON decoded object:

  /** * @desc    Do a DELETE request with cURL * * @param   string $path   path that goes after the URL fx. "/user/login" * @param   array  $json   If you need to send some json with your request. *                         For me delete requests are always blank * @return  Obj    $result HTTP response from REST interface in JSON decoded. */public function curl_del($path, $json = ''){    $url = $this->__url.$path;    $ch = curl_init();    curl_setopt($ch, CURLOPT_URL, $url);    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");    curl_setopt($ch, CURLOPT_POSTFIELDS, $json);    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);    $result = curl_exec($ch);    $result = json_decode($result);    curl_close($ch);    return $result;}


To call GET,POST,DELETE,PUT All kind of request, i have created one common function

function CallAPI($method, $api, $data) {    $url = "http://localhost:82/slimdemo/RESTAPI/" . $api;    $curl = curl_init($url);    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);    switch ($method) {        case "GET":            curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "GET");            break;        case "POST":            curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");            break;        case "PUT":            curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");            break;        case "DELETE":            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "DELETE");             curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));            break;    }    $response = curl_exec($curl);    $data = json_decode($response);    /* Check for 404 (file not found). */    $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);    // Check the HTTP Status code    switch ($httpCode) {        case 200:            $error_status = "200: Success";            return ($data);            break;        case 404:            $error_status = "404: API Not found";            break;        case 500:            $error_status = "500: servers replied with an error.";            break;        case 502:            $error_status = "502: servers may be down or being upgraded. Hopefully they'll be OK soon!";            break;        case 503:            $error_status = "503: service unavailable. Hopefully they'll be OK soon!";            break;        default:            $error_status = "Undocumented error: " . $httpCode . " : " . curl_error($curl);            break;    }    curl_close($curl);    echo $error_status;    die;}

CALL Delete Method

$data = array('id'=>$_GET['did']);$result = CallAPI('DELETE', "DeleteCategory", $data);

CALL Post Method

$data = array('title'=>$_POST['txtcategory'],'description'=>$_POST['txtdesc']);$result = CallAPI('POST', "InsertCategory", $data);

CALL Get Method

$data = array('id'=>$_GET['eid']);$result = CallAPI('GET', "GetCategoryById", $data);

CALL Put Method

$data = array('id'=>$_REQUEST['eid'],m'title'=>$_REQUEST['txtcategory'],'description'=>$_REQUEST['txtdesc']);$result = CallAPI('POST', "UpdateCategory", $data);


My own class request with wsse authentication

class Request {    protected $_url;    protected $_username;    protected $_apiKey;    public function __construct($url, $username, $apiUserKey) {        $this->_url = $url;             $this->_username = $username;        $this->_apiKey = $apiUserKey;    }    public function getHeader() {        $nonce = uniqid();        $created = date('c');        $digest = base64_encode(sha1(base64_decode($nonce) . $created . $this->_apiKey, true));        $wsseHeader = "Authorization: WSSE profile=\"UsernameToken\"\n";        $wsseHeader .= sprintf(            'X-WSSE: UsernameToken Username="%s", PasswordDigest="%s", Nonce="%s", Created="%s"', $this->_username, $digest, $nonce, $created        );        return $wsseHeader;    }    public function curl_req($path, $verb=NULL, $data=array()) {                            $wsseHeader[] = "Accept: application/vnd.api+json";        $wsseHeader[] = $this->getHeader();        $options = array(            CURLOPT_URL => $this->_url . $path,            CURLOPT_HTTPHEADER => $wsseHeader,            CURLOPT_RETURNTRANSFER => true,             CURLOPT_HEADER => false                     );                          if( !empty($data) ) {            $options += array(                CURLOPT_POSTFIELDS => $data,                CURLOPT_SAFE_UPLOAD => true            );                                  }        if( isset($verb) ) {            $options += array(CURLOPT_CUSTOMREQUEST => $verb);                                  }        $ch = curl_init();        curl_setopt_array($ch, $options);        $result = curl_exec($ch);                           if(false === $result ) {            echo curl_error($ch);        }        curl_close($ch);        return $result;     }}