example delete curl_setopt php http curl request

curl_setopt - curl delete php example



Solicitud PHP CURL DELETE (4)

Intento hacer una solicitud HTTP DELETE utilizando PHP y cURL.

He leído cómo hacerlo en muchos lugares, pero nada parece funcionar para mí.

Así es como lo hago:

public function curl_req($path,$json,$req) { $ch = curl_init($this->__url.$path); $data = json_encode($json); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $req); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array(''Content-Type: application/json'',''Content-Length: '' . strlen($data))); $result = curl_exec($ch); $result = json_decode($result); return $result; }

Luego sigo adelante y uso mi función:

public function deleteUser($extid) { $path = "/rest/user/".$extid."/;token=".$this->__token; $result = $this->curl_req($path,"","DELETE"); return $result; }

Esto me da un ERROR HTTP interno del servidor. En mis otras funciones usando el mismo método curl_req con GET y POST, todo va bien.

Entonces, ¿qué estoy haciendo mal?


Finalmente resolví esto yo mismo. Si alguien más tiene este problema, aquí está mi solución:

Creé un nuevo método:

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; }

Actualización 2

Dado que esto parece ayudar a algunas personas, aquí está mi último método DELETE curl, que devuelve la respuesta HTTP en el objeto decodificado JSON:

/** * @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; }


Mi propia solicitud de clase con autenticación wsse

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; } }


Para llamar a GET, POST, DELETE, PUT Todo tipo de solicitud, he creado una función común

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);

Método de publicación CALL

$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 método

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


$json empty public function deleteUser($extid) { $path = "/rest/user/".$extid."/;token=".$this->__token; $result = $this->curl_req($path,"**$json**","DELETE"); return $result; }