c++ - 从 cpp 中的 curl 检索响应文本

标签 c++ curl httpresponse

我们需要从 CPP 中的 curl 接收响应字符串,我尝试了以下选项但没有任何效果。js 为此使用 xhr.responseText。我需要在 cpp 中做。

 static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp)
{
    size_t realsize = size * nmemb;
    const char* sp = static_cast<const char*>(contents);
    readBuffer.append(sp, realsize);
    return realsize;
 }

CURLcode res;
char* http_error= new char[100];

readBuffer.clear();
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);
CURLcode code(CURLE_FAILED_INIT);
code = curl_easy_perform(curl);
cout <<  "Curl response msg CURLOPT_WRITEDATA: "<<curl_easy_strerror(code)<< " respose :"<<readBuffer;


res=curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_code) ;
cout <<  "Curl response msg: "<< curl_easy_strerror(res);

最佳答案

将您的 WriteCallback 函数更改为:

size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* userp) {
    userp->append((char*) contents, size * nmemb);
    return size * nmemb;
}

请记住,您正在将 &readBuffer 作为 CURL_WRITEDATA 选项传递。这显示为 WriteCallback 中的第四个参数。由于 &readBuffer 的类型是 std::string*,您可以将其用作回调中的签名。

另外,因为它是一个std::string* 而不是一个std::string,你必须通过指针访问append ,因此 -> 而不是 .。在 curl_easy_perform 之后,readBuffer 应该保存来自 curl 请求的响应。

要获取响应代码,您可以在发出请求后获取它:

long http_code;
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_code);

关于c++ - 从 cpp 中的 curl 检索响应文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38655788/

相关文章:

c++ - 在 mac 上执行 .app 时,fstream 和 qfile 不创建文件

php - 在 cURL PHP 中为 https 启用 SSL 连接( header 空白)

c# - 如何获取下载文件的完整路径

c++ - 使用 CImg : LNK1181: cannot open file "m.lib" on windows 7 x64

c++ - 如何迭代常量 vector ?

c++ - 有一种方法可以区分标题类型吗?

xcode - 在 OS X 10.11 上构建静态 libcurl.a,但找不到 libcurl.a

elasticsearch - 如何发送JSON数据 Elasticsearch 获取请求URL

jQuery; Django ;解析http响应

shell - 循环 curl 调用并在出现错误之前计算成功响应