1.curl_easy_init 返回easy_handle对象(一个CURL*指针)
2.curl_easy_setopt 设置行为
2.1 CURLOPT_URL 设置访问URL
2.2 CURLOPT_HEADERFUNCTION 设置获取到RESPONSE HEADER数据时的回调函数,主要通过curl_easy_getinfo解析其中的应答码,头大小等信息
2.3 CURLOPT_WRITEFUNCTION 设置接收到数据时的回调函数 回调函数原型为:size_t function( void *ptr, size_t size, size_t nmemb, void *stream);
2.4 CURLOPT_HTTPHEADER 设置HTTP请求的头部信息(HEADER)
2.5 CURLOPT_CUSTOMREQUEST 设置请求方式(METHOD),GET,POST
2.6 CURLOPT_POSTFIELDS 设置POST的内容
3.curl_easy_perform 执行行为
4.curl_easy_cleanup 完成会话
绝对不应该在线程之间共享同一个libcurl handle(CURL *对象)
// set params
curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); // url
curl_easy_setopt(curl, CURLOPT_POST, 0); // get reqest
// 构建HTTP报文头
struct curl_slist* headers = NULL;
if (listRequestHeader.size() > 0)
{
std::list<std::string>::iterator iter, iterEnd;
iter = listRequestHeader.begin();
iterEnd = listRequestHeader.end();
for (iter; iter != iterEnd; iter++)
{
headers = curl_slist_append(headers, iter->c_str());
}
if (headers != NULL)
{
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);//设置http请求头信息
}
}
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "post的内容");
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false); // if want to use https
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false); // set peer and host verify false
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, req_reply);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&response);
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
curl_easy_setopt(curl, CURLOPT_HEADER, 1);//响应体中是否包含了头信息,比如Content-Type:application/json;charset=UTF-8
// timeout
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, nConnectTimeout); // set transport and time out time
curl_easy_setopt(curl, CURLOPT_TIMEOUT, nTimeout);
// start request
res = curl_easy_perform(curl);
if (headers != NULL)
{
curl_slist_free_all(headers); //free the list again
}