Quiero almacenar el resultado de esta función curl en una variable, ¿cómo puedo hacerlo?
#include <stdio.h>
#include <curl/curl.h>
int main(void)
{
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "curl.haxx.se");
res = curl_easy_perform(curl);
/* always cleanup */
curl_easy_cleanup(curl);
}
return 0;
}
gracias, lo resolví así:
#include <stdio.h>
#include <stdlib.h>
#include <curl/curl.h>
function_pt(void *ptr, size_t size, size_t nmemb, void *stream){
printf("%d", atoi(ptr));
}
int main(void)
{
CURL *curl;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "curl.haxx.se");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, function_pt);
curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
system("pause");
return 0;
}
CURLcode res;
no seRespuestas:
Puede configurar una función de devolución de llamada para recibir fragmentos de datos entrantes utilizando
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, myfunc);
La devolución de llamada tomará un argumento definido por el usuario que puede establecer usando
curl_easy_setopt(curl, CURLOPT_WRITEDATA, p)
Aquí hay un fragmento de código que pasa un búfer
struct string {*ptr; len}
a la función de devolución de llamada y aumenta ese búfer en cada llamada usando realloc ().fuente
size_t
(además de éllen
mismo) fueran declaradosconst
.std::string
vaya aquíLa siguiente respuesta es la forma C ++ de hacerlo, con
std::string
, en lugar de una cadena terminada en nulo. Todavía usa una función de devolución de llamada (no hay forma de evitarla), pero también maneja el error de asignación usando try / catch.fuente
s->append((char*)contents. nmemb);
funciona perfectamente conmigo y es más conciso. Además, la firma de la función oficial para la devolución de llamada tiene unchar*
primer argumento, por lo que puede usar eso y omitir la conversión. Y, por último,s->resize()
inicializa el espacio recién asignado. Como está a punto de sobrescribirlo de todos modos,s->reserve()
sería más eficiente.De leer el manual aquí: http://curl.haxx.se/libcurl/c/curl_easy_setopt.html Creo que necesita varias llamadas a CURL_SETOPT, la primera es la URL que desea procesar, la segunda es algo como:
Donde function_ptr coincide con esta firma:
Lo que sucede aquí es que denota una función de devolución de llamada a la que libcurl llamará cuando tenga alguna salida para escribir de cualquier transferencia que haya invocado. Puede hacer que escriba automáticamente en un archivo o pasarle un puntero a una función que manejará la salida en sí. Con esta función, debería poder ensamblar las diversas cadenas de salida en una sola pieza y luego usarlas en su programa.
No estoy seguro de qué otras opciones puede tener que configurar / qué más afecta cómo desea que se comporte su aplicación, así que eche un vistazo a esa página.
fuente
Aquí hay una versión C ++ de la respuesta aceptada de alex-jasmin
fuente