全局初始化 libcurl使用之前必须执行全局初始化,只能执行一次。curl_global_cleanup同理
curl_global_init(CURL_GLOBAL_ALL);
使用curl_version_info来查看所运行的libcurl细节,看看它支持一些什么功能
使用easy interface 为了使用easy interface,必须创建一个easy hadle。
CURL *easy_handle = curl_easy_init();
不应该在不同的线程中使用同一个easy_handle
设置handle属性 通过curl_easy_setopt来设置handle的属性
设置请求链接来下载资源
int ret = curl_easy_setopt(easy_handle, CURLOPT_URL, "http://speedtest.wdc01.softlayer.com/downloads/test10.zip");
可以通过curl_easy_reset来重置curl_easy_setopt设置的内容,把它们还原成默认值
设置CURLOPT_VERBOSE为1L来输出详细信息以供调试,如果还不够,继续设置CURLOPT_DEBUGFUNCTION
执行网络请求
上面的一些过程仅仅是设置好了handle的参数,还没有真正的执行网络请求。
调用curl_easy_perform将执行网络请求
ret = curl_easy_perform(easy_handle);
if (ret != CURLE_OK)
{
cout << ret << ":" << curl_easy_strerror(static_cast(ret)) << endl;
switch (ret)
{
case CURLE_HTTP_RETURNED_ERROR:
{
int code = 0;
curl_easy_getinfo(easy_handle, CURLINFO_RESPONSE_CODE, &code);
printf("HTTP error code:%d\n", code);
break;
}
}
}
curl_easy_perform会返回一个编号来告诉你成功或者失败,你可以使用CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ERRORBUFFER, char *buf);来获得更多的错误信息
如果想重新发起一个新的请求,官方推荐重复利用这个easy_handle,这样libcurl会尝试重复利用先前的连接
curl_easy_pause来暂停或者恢复一个连接
释放资源
当请求执行完成之后可以释放掉handle资源
curl_easy_cleanup(easy_handle);当不再需要发送网络请求时,释放全局资源
curl_global_cleanup();
总结
libcurl使用顺序
首先初始化全局设置:curl_global_init
初始化easy_handle:curl_easy_init
设置handle的参数:curl_easy_setopt
执行请求:curl_easy_perform
释放handle:curl_easy_cleanup
释放全局资源:curl_global_cleanup