2016-07-29 35 views
0

我們需要從CPP中的curl接收響應字符串,我嘗試了以下選項,但沒有任何工作.js使用xhr.responseText來做這個。我需要在cpp中做。在cpp中檢索curl中的響應文本

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); 
+0

也許你應該使用高級別庫https://github.com/whoshuu/cpr –

+0

沒有直接的方法爲此像檢索http狀態碼? – user2769274

回答

1

更改WriteCallback功能如下:

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

記住,你傳遞&readBufferCURL_WRITEDATA選項。這顯示爲WriteCallback中的第四個參數。由於&readBuffer的類型爲std::string*,因此可以將其用作回調中的簽名。

此外,因爲它是一個std::string*,而不是一個std::string,你必須通過該指針訪問append的因此->代替.。在curl_easy_perform之後,readBuffer應該持有捲曲請求的響應。

獲得響應代碼,你可以抓住是發出請求後:

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

嗨..感謝您的回覆..內側userp-> append((char *)ptr,size * nmemb); ptr是sp(內容)? – user2769274

+0

哎呀,打錯了。我會糾正它。你是對的,它應該是內容。 – huu