Al no obtener curlpp
para trabajar en C++, he decidido empezar a usar libcurl
con C en su lugar (por ahora). Siendo completamente nuevo en C y C++, esto se está volviendo un poco confuso. Ni siquiera estoy seguro de si puedo mantener las funciones C y C++ separadas, pero hasta donde sé, esto es puro C.libcurl salida a la variable en lugar de archivo de texto
Con la ayuda de un amigo, he logrado escribir el resultado (contenido de la página que Curl recogido) a un archivo de texto, pero quiero ponerlo en una variable de cadena en su lugar, por lo que puedo usar la salida en otras partes del código. Podría simplemente volver a abrir el archivo de texto y leer su contenido, pero eso es una tontería, quiero dejar de escribir en un archivo y simplemente guardarlo en una variable de cadena inmediatamente.
La función de escritura
/* the function to invoke as the data received */
size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) {
size_t written;
written = fwrite(ptr, size, nmemb, stream);
return written;
}
El código completo
#include <iostream>
#include "curl/curl.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
/* the function to invoke as the data recieved */
size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) {
size_t written;
written = fwrite(ptr, size, nmemb, stream);
return written;
}
int main(int argc, char *argv[]) {
CURL *curl;
FILE *fp;
CURLcode res;
curl = curl_easy_init();
char outfilename[FILENAME_MAX] = "C:\\Users\\admin\\Downloads\\bbb.txt";
if(curl) {
char *response = NULL;
fp = fopen(outfilename,"wb");
curl_easy_setopt(curl, CURLOPT_URL, "http://www.*hidden*.org/wp-test/lalala.txt");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
fclose(fp);
}
return 0;
}
También esperaba que alguien podría explicar de qué forma se utiliza esta función, exactamente. Estoy acostumbrado (de php y vb.net) a una función como esta:
function1(ThisIsAvariable,ThisIsAvariableToo)
{
if ThisIsAvariable = something
{
Print "gogopowerrrangers" *append* ThisIsAvariableToo
}
};
que luego se utiliza como:
function1(PassThisAsVariable1,PassThisAsVariable2);
Pero en el código anterior, la función
size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream)
se llama simplemente como esto
write_data
Como puedes ver aquí:
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
¿Para qué sirve todo esto?
(void *ptr, size_t size, size_t nmemb, FILE *stream)
¿Curl "llena" automáticamente esos en C/C++ o funciona de manera diferente con funciones que la mayoría de los otros lenguajes?
Gracias por explicar, aunque todavía no lo puedo hacer funcionar. ** uso no válido del tipo incompleto 'struct std :: basic_ostringstream, std :: allocator >' ** que ocurre en la línea * stream-> write (ptr, count); * en su Función write_data. –
natli
Necesita '#include' para obtener la definición de 'std :: ostringstream'. –
sth
Gracias, error de principiante;) – natli