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




9 comentarios: Deja tu comentario

  1. Saludos, te comento tengo que hacer una peticion con GET para ello me indican una URL http://XXX.XXX.XXX.XX:0000/articulo/:codigo
    previo ya tengo un token que debo usar en la cabecera de una segunda solicitud.
    este es la cabecera que debo pasar
    {
    "x-auth": "xxxxxxxxxxxxxxxxxaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbb"
    }

    ResponderEliminar
  2. He intentado infinidad de ejemplos no consigo tener exito te muestro ejemplo del codigo

    {
    "x-auth": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI1ODZkNTM5MmY1ZmYwZjQ5NTcwOTk5ZjYiLCJhY2Nlc3MiOiJhdXRoIiwiaWF0IjoxNDgzNTU5OTM0fQ.lHoLBCLDYiM6jmgnxTdj0v5GGB8jkpiJtZF2Obyh9X4"
    }
    $conexion = curl_init($uri);

    curl_setopt($conexion, CURLOPT_URL,"'http://000.000.000.00:1111/existencia/:HDD-201'") ;

    curl_setopt($conexion, CURLOPT_HTTPGET, TRUE);
    curl_setopt($conexion, CURLOPT_HTTPHEADER, array($token));
    curl_setopt($conexion, CURLOPT_RETURNTRANSFER, 1);

    $respuesta = curl_exec($conexion);
    curl_close($conexion);
    // echo response output
    echo $respuesta;

    ResponderEliminar
    Respuestas
    1. Tienes que mirar que error te está dando en la respuesta/conexión para ver si es por tu parte en el envío o es del servidor al que quieres conectarte. Un saludo.

      Eliminar
  3. Buenas noches, que metodo puedo emplear para obtener datos personales que se encuentra el sitio de registro de ciudadanía con solo ingresar en mi aplicación el nunúme de documento de identidad?

    ResponderEliminar
    Respuestas
    1. Buenas,
      Para consultar datos en el registro de ciudadaní que dices, éste deberá de tener unas especificaciones/API para consulta y en ella vendrá cómo tienes que hacer las peticiones. Yo eso no lo se, te lo tendrá que dar como digo el registro de ciudadaní mediante una API de conexión.
      Un saludo,

      Eliminar
  4. Sandra, hace horas que intento vincular un bot de Telegram desde su API con una página web usando PHP y las funciones CURL.
    No encuentro la manera de que me de una respuesta correcta con los resultados esperados.
    Los pasos fueron los siguientes:
    Armé un bot en Telegram.
    Vinculé dicho bot con la página web "request.php" de un dominio con HTTPS (que es lo que pide la API de Telegram como requisito.
    Intenté con varias formas, usando file_get_contents(php://input) no puedo recuperar la info porque se ve que el servidor tiene bloqueado el uso de esa función.
    Por eso recurrí a algunos ejemplos de CURL pero sólo logro obtener un único resultado: {"ok":false,"error_code":502,"description":"Bad Gateway"}

    Cuando debiera ser un JSON con los mensajes, el chatID y demás valores que arroja Telegram.

    Realmente estoy "liado" como dicen en España (aunque no sé si en toda España jajaj)

    ResponderEliminar
    Respuestas
    1. Buenas,
      Por lo que dices la conexión es correcta con la otra parte, porque te está devolviendo un json, aunque sea de error. ¿Has probado a contactar con el equipo de soporte de la API de telegram? Seguro que si les mandas tu petición y la respuesta recibida te pueden decir a qué es debido.
      Un saludo.

      Eliminar
  5. BUENAS PARA HACER LOGIN EN UNA WEB CON PHP CURL , PERO SOLO TENGO LA DATA DE POSTFIEL Y NO EL RESPON COMO HAGO LOGIN?

    ResponderEliminar
  6. Para enviar el id en la peticion delete, como seria?

    ResponderEliminar