两种请求方式:
Easy interface
CURL* curl = NULL;
curl_global_init() 初始化
curl_easy_init() 获取一个句柄
curl_easy_setopt() 设置参数
url 地址 (必选项)curl_easy_setopt(curl, CURLOPT_URL, url);
http 头 CURLOPT_HTTPHEADER
cookie 消息
发送超时时间 TIMEOUT
设置写数据的函数 CURLOPT_WRITEFUNCTION (这里需要一个写数据的回调函数)
假设你要获取URL所表示的远程主机上的资源。你需要写一段程序用来完成数据传输,你可能希望直接保存接收到的数据而不是简单的在输出窗口中打印它们。所以,你必须首先写一个回调函数用来保存接收到的数据。回调函数的原型如下:
size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp);
设置写数据的变量 CURLOPT_WRITEDATE
curl_easy_perform() 发送数据
curl_easy_cleanup() 数据发送完成后清空句柄
curl_global_cleanup() 清理
multi interface
特性:
提供了pull 接口,使用libcurl 的程序能够决定何时何处调用libcurl 来get/send 数据
在同一线程中实现多条数据同时发送
程序可以在自己的文件描述符和curl的文件描述附中同时等待执行
提供基于事件的处理、扩大传输规模到数千个并发链接
使用流程:
创建一个multi handle curl_nulti_init() 获取一个句柄,该句柄在后续的curl_multi_*() 中使用可以同时并发传输多条数据,每一条数由一个easy handler 创建
需要提前将所有需要传输的easyhandle 创建好,并使用curl_easy_setopt() 设置各自的属性,然后调用curl_multi_add_handle() 逐个添加都multi handle 中
调用curl_multi_perform 进行数据传输
调用curl_multi_info_read 获取当前或之前传输的信息
一个easy handler 传输完成,需要调用curl_multi_remove_hander 将其从multi stack 中移除,然后调用curl_easy_cleanup 将其关闭
multi stack中的所有传输都完成时,调用curl_multi_cleanup 将其关闭(需要先清空easy handle)
libcurl 除了可以可以下载数据外还可以上传数据、
CURL_GLOBAL_ALL //初始化所有的可能的调用。
CURL_GLOBAL_SSL //初始化支持 安全套接字层。
CURL_GLOBAL_WIN32 //初始化win32套接字库。
CURL_GLOBAL_NOTHING //没有额外的初始化。