您需要使用CURLOPT_WRITEFUNCTION
来设置写入的回调函数。我现在无法测试编译此代码,但该函数应该类似于以下内容:
static std::string readBuffer;
static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp)
{
size_t realsize = size * nmemb;
readBuffer.append(contents, realsize);
return realsize;
}
然后通过以下方式调用:
readBuffer.clear();
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
// ...other curl options
res = curl_easy_perform(curl);
调用后,readBuffer
应该包含您的内容。
编辑:您可以使用CURLOPT_WRITEDATA
传递缓冲字符串,而不是将其设置为静态变量。在这种情况下,我只是为了简单起见将其设置为静态变量。除了上面链接的示例之外,此处还有一个很好的页面用于解释选项。
编辑2:按要求,这是一个完整的工作示例,没有静态字符串缓冲区;
#include <iostream>
#include <string>
#include <curl/curl.h>
static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp)
{
((std::string*)userp)->append((char*)contents, size * nmemb);
return size * nmemb;
}
int main(void)
{
CURL *curl;
CURLcode res;
std::string readBuffer;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://www.google.com");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
std::cout << readBuffer << std::endl;
}
return 0;
}