вывод libcurl в переменную вместо текстового файла

Не curlpp для работы на C ++, я решил начать использовать libcurl с C вместо (на данный момент). Будучи совершенно новым для C и C ++, это немного запутывает. Я даже не уверен, могу ли я держать функции C и C ++ отдельно, но, насколько я знаю, это чисто C.

С помощью друга мне удалось написать вывод (содержимое страницы, которое завихрялось), в текстовый файл, но я хочу поместить его в строковую переменную, поэтому я могу использовать вывод в других частях кода , Я мог бы просто повторно открыть текстовый файл и прочитать его содержимое, но это глупо, я хочу прекратить запись в файл и сразу сохранить строчную переменную.

Функция записи

 /* 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; } 

Весь код

 #include  #include "curl/curl.h" #include  #include  #include  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; } 

Я также надеялся, что кто-то сможет подробно рассказать о том, как эта функция используется. Я использую (от php и vb.net) к такой функции:

 function1(ThisIsAvariable,ThisIsAvariableToo) { if ThisIsAvariable = something { Print "gogopowerrrangers" *append* ThisIsAvariableToo } }; 

Который тогда будет использоваться как:

 function1(PassThisAsVariable1,PassThisAsVariable2); 

Но в приведенном выше коде функция

 size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) 

Просто называется так

 write_data 

Как вы можете видеть здесь:

 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); 

Итак, для чего все это?

 (void *ptr, size_t size, size_t nmemb, FILE *stream) 

Ли curl автоматически «заполняет» те, что работают или работает на C / C ++, с функциями, отличными от большинства других языков?

Вы можете использовать строковый stream для сохранения данных в памяти. Вы должны создать stream строк в main и передать указатель на него, чтобы он завивался, например, вы в данный момент передаете указатель на FILE .

 std::ostringstream stream; curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &stream); // call curl like before // ... // then get result as a std::string: std::string output = stream.get(); 

write_data функция write_data будет выглядеть так:

 size_t write_data(char *ptr, size_t size, size_t nmemb, void *userdata) { std::ostringstream *stream = (std::ostringstream*)userdata; size_t count = size * nmemb; stream->write(ptr, count); return count; } 

И о вызове функции он работает в основном так же, как и на других языках. Вы должны указать параметры функции, если вы ее вызываете. Разница в этом случае заключается в том, что в curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data) функция write_data не вызывается. write_data вместо этого указывается как параметр curl_easy_setopt который информирует curl, который должен использовать эту функцию, когда ему нужно записывать данные.

Позже, когда curl получает данные и хочет записать эти данные, он будет вызывать write_data со всеми соответствующими параметрами.