UtilBox(ub)基础组件 -- EasyCurl 发送http请求(1)

长平狐 发布于 2013/01/05 18:17
阅读 289
收藏 0

        昨天晚上锻炼身体,好久没激烈与动了,爽快!回到家,赶紧把之前写好的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);


       设置curl回调函数 :

            /** 
             * @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差不多。之后贴代码 

        


原文链接:http://blog.csdn.net/gugemichael/article/details/7877052
加载中
返回顶部
顶部