elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Enviar datos por POST a un FORM usando cURL
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Enviar datos por POST a un FORM usando cURL  (Leído 4,255 veces)
mester

Desconectado Desconectado

Mensajes: 219


https://www.youtube.com/watch?v=IlY9C6pzxKc


Ver Perfil WWW
Enviar datos por POST a un FORM usando cURL
« en: 13 Septiembre 2016, 17:43 pm »

Hola.

Estoy haciendo un programa que usa cURL para autenticarse en la UA, pero no consigo hacer que envíe los datos por POST. El codigo es el siguiente:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <curl/curl.h>
  5.  
  6. int main (int argc, char **argv) {
  7.  if (argc < 2)
  8.    return fprintf (stderr, "%s <ua mail>\n", argv[0]);
  9.  
  10.  char *user = argv[1];
  11.  char *pass = getpass ("Contraseña de la UA: ");
  12.  CURL *cSession;
  13.  FILE *sf = fopen ("res.html", "at");
  14.  struct curl_httppost *pData = NULL;
  15.  struct curl_httppost *last = NULL;
  16.  
  17.  curl_formadd (&pData, &last,
  18.    CURLFORM_COPYNAME, "username",
  19.    CURLFORM_COPYCONTENTS, argv[1],
  20.    CURLFORM_END);
  21.  curl_formadd (&pData, &last,
  22.    CURLFORM_COPYNAME, "password",
  23.    CURLFORM_COPYCONTENTS, pass,
  24.    CURLFORM_END);
  25.  
  26.  cSession = curl_easy_init ();
  27.  if ( !cSession ) {
  28.    fprintf (stderr, "Error iniciando cURL\n");
  29.  } else {
  30.    curl_easy_setopt (cSession, CURLOPT_VERBOSE, 1);
  31.    curl_easy_setopt (cSession, CURLOPT_URL, "https://autentica.cpd.ua.es/cas/login?service=https://cvnet.cpd.ua.es/uacloud/home/indexVerificado");
  32.    curl_easy_setopt (cSession, CURLOPT_HTTPPOST, pData);
  33.    curl_easy_setopt (cSession, CURLOPT_FOLLOWLOCATION, 1);
  34.    curl_easy_setopt (cSession, CURLOPT_WRITEDATA, (FILE *)sf);
  35.    curl_easy_setopt (cSession, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.63 Safari/537.31");
  36.  
  37.    if (curl_easy_perform (cSession) != 0) {
  38.      fprintf (stderr, "Error executing cURL session\n");
  39.    } else {
  40.      printf ("Done!\n");
  41.    }
  42.  }
  43.  
  44.  curl_easy_cleanup (cSession);
  45.  
  46.  return 0;
  47. }

Lo que quiero saber es por qué no envía los datos al FORM. También he probado quitando la estructura curl_httppost y añadiendo simplemente curl_easy_setopt (cSession, CURLOPT_POSTFIELDS.

Espero que me puedan ayudar.

Y antes de que algun listillo (y vago) diga: "No hacemos tareas aquí". No, no es una tarea, sino se lo preguntaría al profesor, porque el codigo ya está medio hecho.

Gracias de antemano.


En línea

Justicia es dar a cada uno lo que se merece
AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: Enviar datos por POST a un FORM usando cURL
« Respuesta #1 en: 13 Septiembre 2016, 17:56 pm »

Hola excelente codigo, realmente no veo el problema hace tiempo hice un trabajo similar y en mi casi preferi construir mamualmente las variables para el parametro CURLOPT_POSTFIELDS

En mi caso es un pequeño bot para telegram que deje en github.

https://github.com/albertobsd/libtelegrambot/blob/master/telegram.c

El codigo donde realizo mi peticion POST es:

Código
  1. File* telegram_getFile(char *file_id) {
  2. CURL *curl;
  3. CURLcode res;
  4. Response *response = NULL;
  5. File *file = NULL;
  6. char *url = NULL;
  7. char *postdata = NULL;
  8. char *variables[] = {"file_id",NULL};
  9. char *values[] = {file_id,NULL};
  10. int i;
  11. if(file_id){
  12. curl = telegram_curl_init();
  13. url = telegram_makeurl("/getFile");
  14. curl_easy_setopt(curl, CURLOPT_URL, url);
  15. postdata = telegram_build_post(variables,values);
  16. curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postdata);
  17. res = curl_easy_perform(curl);
  18. free(url);
  19. if(res == CURLE_OK) {
  20. response = telegram_parse_response(telegram_buffer,&i);
  21. if(!telegram_error) {
  22. file = telegram_parse_file(response->result,&i);
  23. }
  24. telegram_free_response(response);
  25. telegram_reset_buffer();
  26. }
  27. else {
  28. telegram_set_error("curl_easy_perform() failed!",-1000);
  29. }
  30. free(postdata);
  31. curl_easy_cleanup(curl);
  32. }
  33. else {
  34. telegram_set_error("NULL file_id",-10);
  35. }
  36. return file;
  37. }

Basicamente realizo lo mismo que tu haces pero con menos variables:

Código
  1. curl = telegram_curl_init();
  2. url = telegram_makeurl("/getFile");
  3. curl_easy_setopt(curl, CURLOPT_URL, url);
  4. postdata = telegram_build_post(variables,values);
  5. curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postdata);
  6. res = curl_easy_perform(curl);
  7. free(url);
  8. if(res == CURLE_OK) {
  9.  

Intenta colocar los CURLOPT_POSTFIELDS como ultima llamada a curl_easy_setopt a ver si es solo cuestion del orden.

Mira el ejemplo del la documentacion oficial:

https://curl.haxx.se/libcurl/c/http-post.html


« Última modificación: 13 Septiembre 2016, 17:58 pm por AlbertoBSD » En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Enviar datos por POST a un FORM usando cURL
« Respuesta #2 en: 13 Septiembre 2016, 19:39 pm »

Hola mester, pues verás te faltan más variables a enviar en el FORM aparte de username y password, en la url te recomiendo usar https://autentica.cpd.ua.es/cas/login que vale por igual y quizás evites futuros errores.

Respecto a que no consigues que envie los datos por el POST ¿a qué te refieres? ¿a que no recibes respuesta? ¿que te da error al enviar los datos al server? ¿o que la respuesta que recibes no es la esperada (que no consigues iniciar sesión vaya)?.

Saludos
« Última modificación: 13 Septiembre 2016, 19:46 pm por Kaxperday » En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
mester

Desconectado Desconectado

Mensajes: 219


https://www.youtube.com/watch?v=IlY9C6pzxKc


Ver Perfil WWW
Re: Enviar datos por POST a un FORM usando cURL
« Respuesta #3 en: 13 Septiembre 2016, 19:47 pm »

Hola mester, pues verás te faltan más variables a enviar en el FORM aparte de username y password, en la url te recomiendo usar https://autentica.cpd.ua.es/cas/login que vale por igual y quizás evites futuros errores.

Respecto a que no consigues que envie los datos por el POST ¿a qué te refieres? ¿a que no recibes respuesta o da error al enviar los datos al server o que la respuesta que recibes no es la esperada (que no consigues iniciar sesión vaya)?.

Saludos

¡Hola Kaxperday! Gracias por la respuesta.

Me refiero a que tiene que descargar el HTML cuando ya estas loggeado, es decir, el HTML del UA Cloud, pero se descarga el HTML del login, además de que despues de autenticarse, la cabezera debería de devolver un ID de ASP, y no lo hace. Es por ello que creo que o falta codigo para terminar el login, o no funciona correctamente, supongo que porque no envía bien los datos.

Lo que quiero saber es qué debo hacer para que envíe los datos al login y poder autenticarme desde este cliente.

Gracias.
En línea

Justicia es dar a cada uno lo que se merece
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Enviar datos por POST a un FORM usando cURL
« Respuesta #4 en: 13 Septiembre 2016, 19:57 pm »

No es que no envíe bien los datos, es que estás mandando los datos que te pide de manera incompleta, como dije te falta enviar parametros al post que son explícitamente "lt", "execution", "_eventId", y "submit" además de "username" y "password".

Además debes enviarlos con el contenido que tienen en su campo value como "lt", "execution" y "_eventId", que en el caso de los 2 primeros el valor no es siempre el mismo por lo que deberás de cargar la página recoger el valor y las cookies que te envía (aunque puede que no sean necesarias pero lo más probable es que sí) y ya con todo eso lanzarte a iniciar sesión con el POST una vez tengas todos esos datos de los que te hablo listos.

Saludos y suerte.
« Última modificación: 13 Septiembre 2016, 20:04 pm por Kaxperday » En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Enviar datos con post
PHP
icisneros 3 3,061 Último mensaje 16 Mayo 2008, 00:24 am
por icisneros
Problema al enviar header POST hacia una web con cURL
PHP
.:UND3R:. 2 3,764 Último mensaje 5 Marzo 2012, 15:11 pm
por .:UND3R:.
Enviar un Form usando Httprequest !!
.NET (C#, VB.NET, ASP)
TrashAmbishion 2 3,278 Último mensaje 13 Febrero 2013, 19:52 pm
por TrashAmbishion
[Solucionado] Enviar Datos a Una Pagina PHP Usando El Metodo POST Con VBScript
Scripting
Flamer 0 2,427 Último mensaje 19 Febrero 2016, 01:04 am
por Flamer
Enviar datos de Windows Form C# a TextBox de Pagina WEB ASP.NET
Programación General
Dany Solis 0 2,863 Último mensaje 23 Agosto 2018, 04:34 am
por Dany Solis
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines