Enviar parametros post utilizando CURLOPT_POSTFIELDS

rss-curl Curl es una poderosa herramienta que nos permite abrir una conexión a una diversa variedad de protocolos y que podemos utilizar en nuestros desarrollos. Para contextualizar un poco, Curl por ejemplo es lo que permite que desde alguna pagina puedas importar tus contactos de hotmail, o en tu blog publicar utilizar el lector RSS de alguna fuente de información externa. En esencia permite crear conexiones entre distintos sistemas operativos con distintos protocolos para conectar servicios.

Ahora bien, en esta entrada veremos como usar esta herramienta para enviar los parámetros de inicio de sesión a un formulario, luego ya podremos imaginar usos mucho más interesantes.

Cuando nos referimos a la librería cURL tenemos una muy buena documentación proveniente de la pagina de PHP (Librería Curl) así que si en algún momento te encuentras en apuros podemos recurrir a ella sin problemas.

Las conexión con cURL deben comenzar con curl_init, lo que como resultado nos entregará un manejador(handler) en caso de éxito o FALSE en caso de fallo. Este manejador será necesario para usar las demás funciones y estará disponible hasta que se llame a la función curl_close(). Por ejemplo:

   1: $handler=curl_init("http://www.judavi.com");

   2: $response=curl_exec($handler);

   3: curl_close($handler);

   4: echo $response;

Este código lo que hará es abrir una conexión con www.judavi.com y el navegador mostrará este contenido como propio.

Ahora bien, pasemos a algo más interesante y el verdadero centro de esta entrada, el paso de parámetros a un formulario. Por ejemplo si tuviéramos el siguiente formulario:

   1: <html>

   2:     <body>

   3:         <form action="acceso_exitoso.php" method="post">

   4:             Nombre:<input name="user" type="text" />

   5:             Pass:<input name="password" type="text" />

   6:             <input name="ok" type="submit" value="ok" />

   7:         </form>

   8:     </body>

   9: </html>

formulario de prueba curl

Nuestro formulario de prueba

Como podemos apreciar hay dos campos, un campo de nombre de usuario user y un campo de contraseña pass. Entonces lo que haremos es un script para enviar automáticamente esta información utilizando curlopt_PostFields. El código es el siguiente:

   1: <?php

   2:     $url = "http://www.tusitioespecifico.com/formulario.php";

   3:

   4:     $handler = curl_init();

   5:     curl_setopt($handler, CURLOPT_URL, $url);

   6:     curl_setopt($handler, CURLOPT_POST,true);

   7:     curl_setopt($handler, CURLOPT_POSTFIELDS, "user=VALOR&password=VALOR");

   8:

   9:     $response = curl_exec ($handler);

  10:     curl_close($handler);

  11:

  12: ?>

Veamos línea a línea que está pasando.

En la línea 2. Estamos indicando cual será la URL donde mandaremos los datos, luego inicializamos la conexión, recordando el asunto del manejador.

Como ya hemos invocado la conexión procederemos a establecer las opciones de esta, esto lo hacemos con curl_setopt pasando como parámetros primero el manejador, luego la opción y luego el valor. Tambien es importante recordar que el resultado de curl_setopt es un boolean.

Lo que configuramos en la línea 5 es que la conexión que se abrirá será contra la URL que especificamos antes, luego indicaremos que pasaremos valores utilizando POST y finalmente cuales serán esos valores. En este punto vemos que los valores que se pasaran los pasamos como una cadena y los nombres corresponden a los nombres que tiene las textbox del formulario.

Finalmente ejecutamos el cURL, cerramos la conexión y Voila! Hemos creado un script PHP que cuando se ejecute mandará los valores a un formulario remoto. Claro está, en este punto te preguntarás que de interesante tiene mandar estos valores y ya. Bueno el ejemplo es limitado, pero aun así podría servir para el caso en que luego de realizar la autenticación el servidor enviara un correo electrónico con alguna información especifica que podría ir dentro de alguno de los campos, algo como una especie de sistema para notificar el uso de un aplicativo. Aunque eso nos puede dar para hablar de largo y seguramente lo hablaremos pronto, y es precisamente acerca de como podemos proteger o por lo menos tener una noción de quienes están utilizando un aplicativo desarrollado por nosotros.

Por lo pronto también sobre el ejemplo puedes seguir trabajando. ¿Que tal si  antes de cerrar la conexión  -similar a como hicimos en el primer ejemplo- respondes con el resultado arrojado por el servidor?  En esencia los usos son bastos y se limitan a lo que te imagines que puedas hacer con esta herramienta. Por el momento espero que te haya sido de utilidad, nos leemos pronto.

Share and Enjoy:
  • Print
  • Digg
  • StumbleUpon
  • del.icio.us
  • Facebook
  • Yahoo! Buzz
  • Twitter
  • Google Bookmarks
  • Add to favorites
  • Live

Tags: , , ,

10 Responses to “Enviar parametros post utilizando CURLOPT_POSTFIELDS”

  1. ALFONSO dice:

    Gracias por tu aportación, muy bien explicado y creo que me servira de mucho para un proyecto de pagos online, saludos

  2. JCarlos dice:

    Hola. Recién empiezo con PHP y he estado buscando cómo hacer para realizar una petición hacia una página externa y obtener los resultados provenientes de dicha petición para mostrarlo en mi página sin tener que ir a la página donde se procesa la consulta.
    Creo que esto es lo que buscaba… pero, ¿cómo puedo hacer para tomar esos datos resultantes?
    Usted se refiere a ello como “¿Que tal si antes de cerrar la conexión respondes con el resultado arrojado por el servidor?”. ¿Hay una entrada que explique mejor esto?

  3. judavi dice:

    Hola JCarlos, en el momento no hay una entrada que explique mejor. Sin embargo la idea es, si tienes un servicio en un lugar externo puedes consumirlo desde PHP utilizando CURL, la información que tienes de allá hacerle alguna clase de procesamiento y luego mostrar tu resultado. Por ejemplo. Mi sitio muestra la temperatura de una estación metereologica, la estación a su vez tiene una url (por ejemplo miestacion.com/temperatura) que cuando se llama entrega en texto plano la temperatura actual. Con CURL podrías invocar esa URL, obtener el texto hacer las operaciones que debas hacer de tu lado para finalmente mostrar al usuario la información de tu sitio mas la del servicio externo.

  4. Josue Ramirez dice:

    Hola que tal. Excelente aporte. Yo tengo una pregunta, actualmente lo estoy aplicando en un script. Le envio los valores de dos campos que son fechas y funciona correctamente, sin embargo trato de hacer lo mismo para un control select, y no me carga el valor. Hay algo que se tenga que hacer diferente para este control. De antemano muchas gracias.

  5. judavi dice:

    Hola Josue,
    tienes que recordar que un control select se compone de algo similar a esto:

    <select>
     
    <option value=“volvo”>Volvo</option>
     
    <option value=“saab”>Saab</option>
     
    <option value=“mercedes”>Mercedes</option>
     
    <option value=“audi”>Audi</option>
    </select>

    tu control tiene valores en la propiedad “value” ?

  6. Josue Ramirez dice:

    Gracias por responder, Si, de hecho está formado de la siguiente manera:

    Generado
    Cancelado
    Liberado

    Por default viene seleccionado el value=”N”, pero yo necesito cambiarlo a “L” para recuperar una cierta informacion que se muestra.

  7. Josue Ramirez dice:

    Perdon, aqui va el codigo ”

    Generado
    Cancelado
    Liberado

  8. judavi dice:

    jaja no se ve el codigo porque se filtra. Te acabo de mandar un correo si quieres te ayudo por allí

  9. Josue Ramirez dice:

    Me parece perfecto.

  10. […] “Enviar parametros post utilizando CURLOPT_POSTFIELDS” por Juan David Gómez Caicedo. […]

Leave a Reply