Я пытаюсь сохранить возвращенные данные из Запроса HTTP в переменную.
Код ниже автоматически распечатает отвечание запроса, но мне нужен он для сохранения отвечания на символ или строку.
int main(void)
{
char * result;
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://www.browsarity.com/");
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
return 0;
}
Думаю, вам придется написать функцию для передачи в качестве обратного вызова записи через CURLOPT_WRITEFUNCTION
(см. this). В качестве альтернативы можно создать временный файл и передать его файловый дескриптор через CURLOPT_WRITEDATA
(следующий вариант, перечисленный на этой странице). Затем вы считываете данные из временного файла в строку. Не самое красивое решение, но, по крайней мере, вам не придется возиться с буферами и указателями функций.
EDIT: Поскольку вы не хотите писать в файл, может сработать что-то вроде этого:
#include <string>
size_t write_to_string(void *ptr, size_t size, size_t count, void *stream) {
((string*)stream)->append((char*)ptr, 0, size*count);
return size*count;
}
int main(void) {
// ...
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://www.browsarity.com/");
string response;
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_to_string);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
// The "response" variable should now contain the contents of the HTTP response
}
return 0;
}
DISCLAIMER: Я не тестировал это, и я немного заржавел в C++, но вы можете попробовать.
Вот вам пример http://code.google.com/p/aws4c/source/browse/trunk/aws4c. С # 637 .
Т.Йейтс прав, вам нужно создать функцию, которая будет получать данные. И дайте CURL знать о вашей функции, используя CURLOPT_WRITEFUNCTION.