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