C++ - 发送 Curl 请求在控制台中给出响应而不打印它

时间:2021-06-09 18:57:59

标签: c++ curl

这是我的代码:

CURL *curl;
CURLcode res;
curl = curl_easy_init();
std::string json_message = "{\r\n    \"email\":\"test@abv.bg\",\r\n    \"password\":\"asdasdasd\"\r\n}";

if(curl) {
    curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
    curl_easy_setopt(curl, CURLOPT_URL, "https://www.examle.com/myUrl");
    curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
    struct curl_slist *headers = NULL;
    headers = curl_slist_append(headers, "Accept: application/json");
    headers = curl_slist_append(headers, "Authorization: Bearer secretkeyHere");
    headers = curl_slist_append(headers, "Content-Type: application/json");
    curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
    const char *data = json_message.c_str();
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
    curl_easy_perform(curl);
}
curl_easy_cleanup(curl);

问题在于,当我执行该代码时,http 请求的响应会直接打印到我的控制台应用程序中。我想将响应存储在一个字符串中而不将其打印到控制台无意

你知道为什么会无意中打印出来吗?我如何将响应存储在字符串中?

1 个答案:

答案 0 :(得分:2)

默认情况下,curl 将接收到的数据写入 stdout。您可以通过使用 curl_easy_setopt() 指定自定义 CURLOPT_WRITEFUNCTION 回调来更改它,通过 CURLOPT_WRITEDATA 为其提供 string* 指针。例如:

static size_t writeToString(void *data, size_t size, size_t nmemb, void *userp)
{
    size_t realsize = size * nmemb;
    std::string *str = static_cast<std::string*>(userp);
    str->append(static_cast<char*>(data), realsize);
    return realsize;
}

...

CURL *curl = curl_easy_init();
if (curl) {
    ...
    std::string respStr;
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &writeToString);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, &respStr);

    CURLcode res = curl_easy_perform(curl);

    // use respStr as needed...

    curl_easy_cleanup(curl);
}
相关问题