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 读本地文件错误

 




相关推荐