Enviar datos vía post y get usando cURL y PHP

Continuando con el uso de cURL y PHP veremos la forma de enviar datos ya sea por Post o Get, útil en caso de querer por ejemplo rellenar un formulario de forma automatizada, hay scripts que usan este método para saltar captchas así que las funcionalidades son bastantes.

Enviar datos por Post

Para el envío por de datos por Post se hace uso de CURLOPT_POST y CURLOPT_POSTFIELDS para enviar los parámetros que se quieran, en caso de que dichos parámetros usen espacios se recomienda el uso de urlencode. Manos al código:

//Iniciamos cURL.
$ch = curl_init();
//Accedemos a la URL
curl_setopt($ch, CURLOPT_URL, "http://web.com/for.php");
//Indicamos que vamos a enviar datos por Post.
curl_setopt ($ch, CURLOPT_POST, true);
//Iniciamos una sesion
curl_setopt($ch, CURLOPT_COOKIE, 'COOKIE O SESION');
//Indicamos que queremos imprimir el resultado
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
//Hacemos uso de un User Agent
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows
NT 6.1; es-ES; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13");
//Enviamos los datos por post
curl_setopt ($ch, CURLOPT_POSTFIELDS, "codigo=".urlencode($datos));
//Ejecutamos e imprimimos el resultado
echo curl_exec($ch);

Para CURLOPT_POSTFIELDS se debe indicar el nombre de cada uno de los campos que se envían, en este caso “codigo=”.

Nota: si es más de un campo se usa el carácter & para separarlos. Ejemplo: campouno=valor&campodos=valordos…

Subir archivos con cURL (multipart/form-data)

cURL por defecto envía el contenido usando  application/x-www-form-urlencoded  que es la forma en que un formulario lo enviaría normalmente, pero también podemos enviar el contenido de la forma multipart/form-data que se usa para cargar archivos, datos binarios y en resumen datos no ASCII. Para hacer esto simplemente se debe enviar un array al CURLOPT_POSTFIELDS y automáticamente será cambiado el tipo de envío.

$postdata = array(
'name'    => 'archivito',
// Donde $filename contiene el nombre del archivo a enviar
'file'      => '@'.$filename
);
...
curl_setopt($ch, CURLOPT_POSTFIELDS,  $postdata);

Enviar datos por Get

Enviar datos vía get es bastante sencillo, al acceder a la URL hay que enviar los datos de la siguiente forma:

curl_setopt($ch, CURLOPT_URL, "http://web.com/for.php?codigo=".$datos);

Nota: no intentes usar algo como CURLOPT_GET porque no existe 😛

  6 Comentarios

  1. julian   •  

    Hola que buen aporte. Te agradeceria enormemente si me ayudas con el siguiente asunto ya que veo que manejas muy bien CURL

    Yo utilizo el siguiente metodo y me fuciona muy bien. Es para enviar una peticion via GET con CURL

    $command_val= urlencode(‘transactod..’);
    $username_val= urlencode(‘fred123′); →→→ campo de texto de otro formulario que varia
    $amount_val = urlencode(’10’);

    $str= “?Command=”.$command_val.”&Username=”.$username_val.”&Amount=”.$amount_val;

    print $str;

    $ch=curl_init();
    curl_setopt($ch,CURLOPT_URL,’https://www.voipinfocenter.com/API/Request.ashx’.$str);
    curl_exec($ch);
    curl_close($ch);

    Pero lo que yo necesito es traer el valor de la variable $username es decir en este caso “fres123” o cualquier otro de un formulario en otra ubicacion por ejemplo formulario.php a esta ubicacion. es de un campo tipo texto que cambia dependiendo del valor que se elija.

    Las variables $command y $amount son constantes con los mismo valores pero el username varia. Todo esto lo envio mediante esta peticion via GET

    Como lo podria hacer?

    Agradesco mucho tu respuesta. Muchas Gracias

    • Brian Urban   •     Autor

      En el caso para obtener el usuario de la pagina tocaría primero hacer una conexión a la página y con alguna de las funciones de PHP (substr tal vez funcione) recorrer todo el contenido de la misma y sacar el usuario que debe ser almacenado en una variable para conectarse de nuevo con el código que ya tienes. Basicamente hacer uso de cURL 2 veces.

  2. Koke   •  

    Hola yo estoy enviado variables por post con curl todo inserta correctamente pero el detalle es que el portal de a quien le envio las variables me tiene que enviar un correo pero al parecer el curl lo ignora o que otro parámetro por llamarlo asi debo insertar en el código. Muchas gracias

  3. alfons   •  

    hola, b noshes, nose si me podrian ayudar, necesito mandar 3 variables por un post, para generar un reporte en pdf, pero no me lo respeta, me podrias decir si esta bien por fa:
    echo “PDF“;

    quiero mandar un reporte por fecha y por clave.

  4. Gintoki   •  

    Rafa para las peticiones GET es solo pasar los datos en la url hay esta bien explicado:

    1 curl_setopt($ch, CURLOPT_URL, “http://web.com/formulario.php?codigo=”.$datos);

  5. Rafa   •  

    Hola Brian!

    Intento contactar contigo pero no veo tu email así que te dejo un comentario en este excelente post esperando que lo leas.

    Resulta que llevo un tiempo intentando crear una URL con envio de parametros para prerellenar un formulario de una web que no es mía, es decir, una URL que cuando aterrice en el destino (que es una web con un formulario) aparezca un nombre y un email (por ejemplo) predeterminado.

    Tu articulo de todos los que he leido creo que es el que mas cerca está pero sigo sin encontrar respuestas. Además he visto que explicas un http script via POST pero no via GET o al menos no lo he entendido.

    ¿Me ayudarías a solucionar este problema?

    Espero respuesta.

    Gracias

    Rafa.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *