Tipos de peticiones/request con PHP cURL


   Vamos a ver como implementar los diferentes tipos de peticiones que se pueden hacer en PHP mediante cURL, para cuando necesitemos hacer alguna conexión con servicios web, apis, etc.

Petición GET

public function peticion_get(){

$url = "https://www.servicioprueba.com/request";

$conexion = curl_init();



// --- Url

curl_setopt($conexion, CURLOPT_URL,$url);

// --- Petición GET.

curl_setopt($conexion, CURLOPT_HTTPGET, TRUE);

// --- Cabecera HTTP.

curl_setopt($conexion, CURLOPT_HTTPHEADER,array('Content-Type: application/json'));

// --- Para recibir respuesta de la conexión.

curl_setopt($conexion, CURLOPT_RETURNTRANSFER, 1);



// --- Respuesta

$respuesta=curl_exec($conexion);



if($respuesta===false)

 echo "error";

curl_close($conexion);

}

   Esto son parámetros básicos, quizás sobre incluso CURLOPT_RETURNTRANSFER. Para indicar que es una petición GET también podíamos usar lo siguiente:
curl_setopt($conexion, CURLOPT_CUSTOMREQUEST, "GET");

Pero con CURLOPT_HTTPGET a true no hace falta.

Petición POST

public function peticion_post(){



$url = "https://www.servicioprueba.com/request";

$conexion = curl_init();

$envio = "datos que se envian"; // --- Puede ser un xml, un json, etc.



curl_setopt($conexion, CURLOPT_URL,$url);

// --- Datos que se van a enviar por POST.

curl_setopt($conexion, CURLOPT_POSTFIELDS,$envio);

// --- Cabecera incluyendo la longitud de los datos de envio.

curl_setopt($conexion, CURLOPT_HTTPHEADER,array('Content-Type: application/json', 'Content-Length: '.strlen($envio)));

// --- Petición POST.

curl_setopt($conexion, CURLOPT_POST, 1);

// --- HTTPGET a false porque no se trata de una petición GET.

curl_setopt($conexion, CURLOPT_HTTPGET, FALSE);

// -- HEADER a false.

curl_setopt($conexion, CURLOPT_HEADER, FALSE);



// --- Respuesta.

$respuesta=curl_exec($conexion);



if($respuesta===false)

 echo "error";

curl_close($conexion);

}

   Como en la petición anterior podríamos usar CURLOPT_CUSTOMREQUEST pero tampoco hace falta porque ya le decimos que se trata de una petición POST con CURLOPT_POST.

Petición PUT

Esta es similar a POST y en este caso si utilizamos CUSTOMREQUEST.

public function peticion_put(){



$url = "https://www.servicioprueba.com/request";

$conexion = curl_init();

$envio = "datos que se envian"; // --- Puede ser un xml, un json, etc.



curl_setopt($conexion, CURLOPT_URL,$url);

// --- Datos que se van a enviar por PUT.

curl_setopt($conexion, CURLOPT_POSTFIELDS,$envio);

// --- Cabecera incluyendo la longitud de los datos de envio.

curl_setopt($conexion, CURLOPT_HTTPHEADER,array('Content-Type: application/json', 'Content-Length: '.strlen($envio)));

// --- Petición PUT.

curl_setopt($conexion, CURLOPT_CUSTOMREQUEST, "PUT");

// --- HTTPGET a false porque no se trata de una petición GET.

curl_setopt($conexion, CURLOPT_HTTPGET, FALSE);



// --- Respuesta.

$respuesta=curl_exec($conexion);



if($respuesta===false)

 echo "error";

curl_close($conexion);

}

Petición PATCH

public function peticion_patch(){



$url = "https://www.servicioprueba.com/request";

$conexion = curl_init();

$envio = "datos que se envian"; // --- Puede ser un xml, un json, etc.



curl_setopt($conexion, CURLOPT_URL,$url);

// --- Datos que se van a enviar por PATCH.

curl_setopt($conexion, CURLOPT_POSTFIELDS,$envio);

// --- Cabecera incluyendo la longitud de los datos de envio.

curl_setopt($conexion, CURLOPT_HTTPHEADER,array('Content-Type: application/json', 'Content-Length: '.strlen($envio)));

// --- Petición PATCH.

curl_setopt($conexion, CURLOPT_CUSTOMREQUEST, "PATCH");

// --- HTTPGET a false porque no se trata de una petición GET.

curl_setopt($conexion, CURLOPT_HTTPGET, FALSE);



// --- Respuesta.

$respuesta=curl_exec($conexion);



if($respuesta===false)

 echo "error";

curl_close($conexion);

}

Petición DELETE

public function peticion_patch(){



$url = "https://www.servicioprueba.com/request";

$conexion = curl_init();



curl_setopt($conexion, CURLOPT_URL,$url);

// --- Cabecera

curl_setopt($conexion, CURLOPT_HTTPHEADER,array('Content-Type: application/json'));

// --- Petición DELETE.

curl_setopt($conexion, CURLOPT_CUSTOMREQUEST, "DELETE");

// --- HTTPGET a false porque no se trata de una petición GET.

curl_setopt($conexion, CURLOPT_HTTPGET, FALSE);



// --- Respuesta.

$respuesta=curl_exec($conexion);



if($respuesta===false)

 echo "error";

curl_close($conexion);

}

Otros parámetros

   Dependiendo de la conexión que tengamos que hacer podemos/debemos poner otros parámetros en el curl. Os pongo algunos interesantes:

curl_setopt($conexion, CURLOPT_COOKIESESSION, FALSE);

curl_setopt($conexion, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);// Para poner el tipo de certificado

  curl_setopt($conexion, CURLOPT_USERPWD, "usuario:password");