昨天晚上锻炼身体,好久没激烈与动了,爽快!回到家,赶紧把之前写好的curl组件分享出来,EasyCurl其实就是对libcurl的一个封装,libcurl如果没用过的可以百度之。
curl其实很简单理解,socket大家都用过,其实http请求也是个socket短链接,只是通信的字段会按着HTTP字段来组包,而且都是明文的。比如在浏览器里输入www.baidu.com,就能开间回来的html代码和html code等信息,其实这就是一次curl的过程。linux命令行就有一个curl的shell命令,通过curl -v url就可以看出curl的作用。
libcurl就是curl的一个库,可以发送http请求(ftp/cookies等都支持) 功能比较全了,EasyCurl只是在它之上用c++提供了一些比较人性化的借口(不必在纠结curl_set_option之类的)。EasyCurl不是用libcurl的默认输出方法(libcurl默认把网页返回的content打印到stdout),而是会让用户传入一个buffer,在执行完curl动作后,用户的缓冲区会被写入数据。EasyCurl还支持用会传入一个回调函数,来制定如何处理curl拿到的数据,这两者只能用其中一个方法。
libcurl的接口如下
namespace ubplus
{
class EasyCurl
{
// .....
}
}
设置要访问的url :
/**
* @brief : curl_set_opt(CURLOPT_URL)
*
* @param : [in] url , url string
*
* @return : if CURL* not vaild , get_error() will set
*/
int set_url(std::string url);
/**
* @brief : give curl a callback which is called
* when fetched data is ready to copy
*
* @param : function pointer
*/
int set_curl_callback(CURL_CALLBACK);
设置回调函数的最后一个context指针(此指针是EasyCurl帮用户传入回调函数的,EasyCurl只负责传递) :
/**
* @brief : pass to callback lastest param
*
* @param : function pointer
*/
int set_curl_callback_context(void*);
设置用户的缓冲区,curl的结果会写入这里,如果没设置,则什么都不做 :
/**
* @brief : set user's buffer , if we do fetch() then we
* write the content to buffer if user set their
* own callback , this buffer will ignore
*
* @param : [out] user buffer
* [in] buffer length
*
* @return : if buffer is invaild , get_error() will set
*/
int set_user_buffer(char** buf,size_t len);
设置timeout超时时间,单位秒,如果curl的此时间内没有返回则直接返回 :
/**
* @brief : curl_set_opt(CURLOPT_TIMEOUT)
*
* @param : [in] timeout , time in seconds
*
* @return : if CURL* not vaild , get_error() will set
*/
int set_timeout(unsigned long time);
设置post数据,默认采用http get方法,如果设置了post数据,则采用http post :
/**
* @brief : enable post method and set post data
*
* @param : [in] post , post data
*
* @return : if CURL* not vaild , get_error() will set
*/
int set_post_data(void* post);
真正执行curl的方法,设置好所有设置后调用,返回的数据会被写入用户缓冲区 :
/**
* @brief : do curl action
*
* @return : curl ok or not , get_error() will set
*/
int fetch();
还有一些其他的如get_error_msg()之类的就不列出了,EasyCurl就是方便libcurl的使用,和直接使用libcurl差不多。之后贴代码