cURL сохранить передачу печати на консоль? - PullRequest
0 голосов
/ 02 июля 2019

Мое приложение хранит тело ответа на консоли. в то время как нет никакой функции, такой как cout или подобная функция, которую я вставил в код. Это так странно.

#include <iostream>
#include <curl.h>

#pragma comment(lib, "libcurldll.lib");

int main() {
    CURL* curl = curl_easy_init();

    curl_easy_setopt(curl, CURLOPT_URL, "url");
    curl_easy_setopt(curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36");
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);

    curl_easy_perform(curl);
    curl_easy_cleanup(curl);

    return 0;
}

1 Ответ

0 голосов
/ 02 июля 2019

Согласно документации , стандартное поведение libcurl - записать ответ на stdout, используя fwrite.

. Вам нужно будет переопределить CURLOPT_WRITEFUNCTION следующим образом:

size_t my_write_callback(char *ptr, size_t size, size_t nmemb, void *userdata) {
    cout << "Received " << nmemb << " bytes" << endl;
    return nmemb;
}

curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_write_callback);

Вы можете управлять значением userdata, изменяя CURLOPT_WRITEDATA , по умолчанию оно равно stdout.

EDIT: простой примеркоторый использует std::string в качестве буфера памяти:

size_t my_write_callback(char *ptr, size_t size, size_t nmemb, void *userdata) {
    static_cast<std::string*>(userdata)->append((char*) ptr, size * nmemb);
    return nmemb;
}

std::string buf;
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_write_callback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buf);
curl_easy_perform(curl);
// do something with buf
...