libcurl库的使用
阅读数:284 评论数:0
跳转到新版页面分类
C/C++
正文
一、简介
libcurl是一个跨平台的网络协议库,libcurl主要提供了两种发送http请求的方式,分别是Easy interface方式和multiinterface方式,前者是采用阻塞的方式发送单条数据,后者采用组合的方式可以一次性发送多条数据。
二、Easyn interface
1、简要流程为:
(1)在主线程中调用curl_global_init(CURL_GLOBAL_ALL)P初始化
(2)调用curl_easy_init获取一个句柄
(3)调用curl_easy_setop函数设置此次传输的一些基本参数,如url地址、http头、cookie信息、发送超时时间等,其中url地址是必须设置的。
(4)调用curl_easy_perform函数发送数据
(5)数据发送完毕后,调用curl_easy_cleanup清空句柄
(6)调用curl_global_cleanup()做清理工作
2、一些基本函数
(1)CURLcode curl_global_init(long flags)
这个函数只需调用一次(当然执行完curl_global_cleanup后仍可再调用),如果这个函数在curl_easy_init函数调用时还没调用,它将由libcurl库自动调用,所以多线程下最好主动调用该函数以防止在线程中被多次调用。
参数:flags
CURL_GLOBAL_ALL | 初始化所有可能的调用 |
CURL_GLOBAL_SSL | 初始化支持安全套接字层 |
CURL_GLOBAL_WIN32 | 初始化win32套接字库 |
CURL_GLOBAL_NOTHING | 没有额外的初始化 |
(2)void curl_global_cleanup(void)
用来对curl_global_cleanup做清理工作,虽然libcurl是线程安全的,但本函数非线程安全。
(3)char* curl_version()
当前libcurl库的版本。
(4)CURL* curl_easy_init()
用来初始化一个CURL指针,意味着一个会话的开始。
(5)void curl_easy_cleanup(CURL* curl)
与curl_easy_init配合使用
(6)CURLcode curl_easy_setopt(CURL* curl,CURLoption option,parameter)
3、curl_easy_setopt函数部分选项介绍
CURLOPT_URL | 设置访问URL |
CURLOPT_WRITEFUNCTION CURLOPT_WRITEDATA | 指定接收到数据后回调用的函数,CURLOPT_WRITEDATA用于表明回调函数最后一个参数的来源。 |
CURLOPT_HEADERFUNCTION CURLOPT_HEADERDATA | 一旦接收到http头部数据后使用。 |
CURLOPT_READFUNCTION CURLOPT_READDATA | 读取数据传递给远程主机时使用 |
CURLOPT_NOPROGRESS CURLOPT_PROGRESSFUNCTION CURLOPT_PROGRESSDATA | 跟数据传输进度相关,CURLOPT_PROGRESSFUNCTION 指定的函数正常情况下每秒被libcurl调用一次,为了使CURLOPT_PROGRESSFUNCTION被调用,CURLOPT_NOPROGRESS必须被设置为false,CURLOPT_PROGRESSDATA指定的参数将作为CURLOPT_PROGRESSFUNCTION指定函数的第一个参数 |
CURLOPT_TIMEOUT CURLOPT_CONNECTIONTIMEOUT | CURLOPT_TIMEOUT 由于设置传输时间,CURLOPT_CONNECTIONTIMEOUT 设置连接等待时间 |
CURLOPT_FOLLOWLOCATION | 设置重定位URL |
CURLOPT_RANGE CURLOPT_RESUME_FROM |
断点续传相关设置。CURLOPT_RANGE 指定char *参数传递给libcurl,用于指明http域的RANGE头域,例如: 表示头500个字节:bytes=0-499 表示第二个500字节:bytes=500-999 表示最后500个字节:bytes=-500 表示500字节以后的范围:bytes=500- 第一个和最后一个字节:bytes=0-0,-1 同时指定几个范围:bytes=500-600,601-999 CURLOPT_RESUME_FROM 传递一个long参数给libcurl,指定你希望开始传递的 偏移量。 |
4、curl_easy_perform函数说明
curl_easy_perform的返回值。返回0意味一切ok,非0代表错误发生。主要错误码说明:
CURLE_OK | 任务完成一切都好 |
CURLE_UNSUPPORTED_PROTOCOL | 不支持的协议,由URL的头部指定 |
CURLE_COULDNT_CONNECT | 不能连接到remote 主机或者代理 |
CURLE_REMOTE_ACCESS_DENIED | 访问被拒绝 |
CURLE_HTTP_RETURNED_ERROR | Http返回错误 |
CURLE_READ_ERROR | 读本地文件错误 |