Autor
|
Tema: Enviar datos por POST a un FORM usando cURL (Leído 4,303 veces)
|
mester
Desconectado
Mensajes: 219
https://www.youtube.com/watch?v=IlY9C6pzxKc
|
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: #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <curl/curl.h> int main (int argc, char **argv) { if (argc < 2) return fprintf (stderr , "%s <ua mail>\n", argv [0]); char *user = argv[1]; char *pass = getpass ("Contraseña de la UA: "); CURL *cSession; FILE *sf = fopen ("res.html", "at"); struct curl_httppost *pData = NULL; struct curl_httppost *last = NULL; curl_formadd (&pData, &last, CURLFORM_COPYNAME, "username", CURLFORM_COPYCONTENTS, argv[1], CURLFORM_END); curl_formadd (&pData, &last, CURLFORM_COPYNAME, "password", CURLFORM_COPYCONTENTS, pass, CURLFORM_END); cSession = curl_easy_init (); if ( !cSession ) { fprintf (stderr , "Error iniciando cURL\n"); } else { curl_easy_setopt (cSession, CURLOPT_VERBOSE, 1); curl_easy_setopt (cSession, CURLOPT_URL, "https://autentica.cpd.ua.es/cas/login?service=https://cvnet.cpd.ua.es/uacloud/home/indexVerificado"); curl_easy_setopt (cSession, CURLOPT_HTTPPOST, pData); curl_easy_setopt (cSession, CURLOPT_FOLLOWLOCATION, 1); curl_easy_setopt (cSession, CURLOPT_WRITEDATA, (FILE *)sf); 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"); if (curl_easy_perform (cSession) != 0) { fprintf (stderr , "Error executing cURL session\n"); } else { } } curl_easy_cleanup (cSession); return 0; }
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
Mensajes: 3.705
🏴 Libertad!!!!!
|
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.cEl codigo donde realizo mi peticion POST es: File* telegram_getFile(char *file_id) { CURL *curl; CURLcode res; Response *response = NULL; File *file = NULL; char *url = NULL; char *postdata = NULL; char *variables[] = {"file_id",NULL}; char *values[] = {file_id,NULL}; int i; if(file_id){ curl = telegram_curl_init(); url = telegram_makeurl("/getFile"); curl_easy_setopt(curl, CURLOPT_URL, url); postdata = telegram_build_post(variables,values); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postdata); res = curl_easy_perform(curl); if(res == CURLE_OK) { response = telegram_parse_response(telegram_buffer,&i); if(!telegram_error) { file = telegram_parse_file(response->result,&i); } telegram_free_response(response); telegram_reset_buffer(); } else { telegram_set_error("curl_easy_perform() failed!",-1000); } curl_easy_cleanup(curl); } else { telegram_set_error("NULL file_id",-10); } return file; }
Basicamente realizo lo mismo que tu haces pero con menos variables: curl = telegram_curl_init(); url = telegram_makeurl("/getFile"); curl_easy_setopt(curl, CURLOPT_URL, url); postdata = telegram_build_post(variables,values); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postdata); res = curl_easy_perform(curl); if(res == CURLE_OK) {
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
Mensajes: 702
The man in the Middle
|
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
Mensajes: 219
https://www.youtube.com/watch?v=IlY9C6pzxKc
|
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
Mensajes: 702
The man in the Middle
|
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.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Enviar datos con post
PHP
|
icisneros
|
3
|
3,075
|
16 Mayo 2008, 00:24 am
por icisneros
|
|
|
Problema al enviar header POST hacia una web con cURL
PHP
|
.:UND3R:.
|
2
|
3,776
|
5 Marzo 2012, 15:11 pm
por .:UND3R:.
|
|
|
Enviar un Form usando Httprequest !!
.NET (C#, VB.NET, ASP)
|
TrashAmbishion
|
2
|
3,318
|
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,448
|
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,907
|
23 Agosto 2018, 04:34 am
por Dany Solis
|
|