从cpp中的curl中检索响应文本

时间:2016-07-29 09:53:51

标签: 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);

1 个答案:

答案 0 :(得分:2)

将您的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);