首先了解一下基本的函数作用
1. 调用curl_global_init()初始化libcurl
2. 调用curl_easy_init()函数得到 easy interface型指针
3. 调用curl_easy_setopt()设置传输选项
4. 根据curl_easy_setopt()设置的传输选项,实现回调函数以完成用户特定任务
5. 调用curl_easy_perform()函数完成传输任务
6. 调用curl_easy_cleanup()释放内存
贴图看代码,这是百度NLP的接口例子
1、回调函数
-
static size_t callback(void *ptr, size_t size, size_t nmemb, void *stream) {
-
// 获取到的body存放在ptr中,先将其转换为string格式
-
std::string html_data(reinterpret_cast<const char*>(ptr), size * nmemb);
-
*(reinterpret_cast<std::ostringstream*>(stream)) << html_data;
-
return size * nmemb;
-
}
-
int unit_utterance(std::string &json_result, const std::string json_request_body,
-
const std::string &access_token) {
-
std::string url = get_utterance_url + "?access_token=" + access_token;
-
CURL *curl = NULL;
-
CURLcode result_code;
-
int is_success = 0;
-
curl = curl_easy_init();
-
if (curl) {
-
std::ostringstream writedata;
-
curl_easy_setopt(curl, CURLOPT_URL, url.data());
-
cout << "url "<<url.data() <<endl;
-
curl_easy_setopt(curl, CURLOPT_POST, 1);
-
curl_slist *headers = NULL;
-
headers = curl_slist_append(headers, "Content-Type:application/json;charset=UTF-8");
-
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
-
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json_request_body.data());
-
curl_easy_setopt(p_curl, CURLOPT_WRITEDATA, &writedata);
-
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, callback);
-
result_code = curl_easy_perform(curl);
-
if (result_code != CURLE_OK) {
-
fprintf(stderr, "curl_easy_perform() failed: %s\n",
-
curl_easy_strerror(result_code));
-
cout << "error code "<<result_code << endl;
-
is_success = 1;
-
return is_success;
-
}
-
json_result = writedata.str();
-
//收集到完整的json数据
-
curl_easy_cleanup(curl);
-
is_success = 0;
-
} else {
-
fprintf(stderr, "curl_easy_init() failed.");
-
is_success = 1;
-
}
-
return is_success;
-
}
调用curl_easy_perform()函数表示完成传输任务