博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
libcurl在windows下的使用
阅读量:5008 次
发布时间:2019-06-12

本文共 1988 字,大约阅读时间需要 6 分钟。

  • curl在linux下很好用,但到了windows下写程序却没办法使用了,这时候可以使用libcurl库
  • libcurl库的编译网上很多,我就不一一赘述了,curl的官方网站:https://curl.haxx.se/,下载下来根据README编译即可
  • 在使用libcurl的程序中,首先需要初始化libcurl的全局环境,意味着无论你要执行多少次的传输,都应该且只初始化一次:
1 curl_global_init(CURL_GLOBAL_ALL);//该语句是全局初始化,在程序中只需要执行一次,而且初始化与释放配套,即初始化之后环境,在程序结束的时候需要清除该环境 2 curl_global_cleanup();//该函数用来释放掉初始化的全局环境 注意:请避免重复的调用curl_global_init和 curl_global_cleanup,他们每个仅被调用一次。
  • 全局初始化函数需要一个参数:
    • CURL_GLOBAL_ALL:表示初始化所有已知的内部子模块,一般都是使用这个宏
    • CURL_GLOBAL_WIN32:只被应用在windows系统上,初始化win32套接字
    • CURL_GLOBAL_SSL:初始化与ssl相关的环境
    • CURL_GLOBAL_NOTHING:没有额外的初始化
  • 在初始化全局环境之后,就可以使用libcurl了,为了使用libcurl提供的简单借口,需要创建一个简单借口的句柄:
//初始化简单接口的句柄,每一个简单的接口通信都需要一个句柄,也就是说需要为每个准备传输数据的线程都创建一个句柄,句柄不能共享
CURL *curl = curl_easy_init(); //初始化之后需要判空,判断句柄是否初始化成功了 if(curl == NULL){/*打印日志,初始化失败*/}
  • 得到句柄curl之后,可以在这个句柄中设置多个选型
1  //设置curl的信息 2  函数原型:CURLcode curl_easy_setopt(CURL *curl, CURLoption option, …); 3   4  //设置防止301,302重定向 5  curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION,0); 6  7 //当需要对响应的数据进行解析的话,就需要一个回调函数取到返回数据 8 //string 就是要解析的返回数据 9 string content;10 long retcode = 0;//http的返回码,判断响应11 12  curl_easy_setopt(curl, CURLOPT_WRITEDATA, &content);13  curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &process_data);14  //准备发送request的url15  curl_easy_setopt(curl, CURLOPT_URL, "url"); 16  //当发送的url请求是需要验证用户名密码的,也可以将用户名和密码设置到句柄内17  curl_easy_setopt(curl, CURLOPT_USERPWD, "username:password");18 19 //都设置完成之后就可以执行了20 curl_easy_perform(curl);21 22 CURLcode result = curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE , &retcode);23 24 if ( (result != CURLE_OK) || retcode != 200 ){
/*25 CURLE_OK 代表 curl的错误代码,ok代表成功26 27 */}28 29 //到这里一个完整的libcurl请求就发送出去了,在结束时还需要将句柄删除掉,就是说每一次init都需要一个对应的cleanup30 curl_easy_cleanup(curl);
  • 获取返回数据的方法代码如下:
1 static size_t process_data(void *data, size_t size, size_t nmemb, string &content)2 {3     long sizes = size * nmemb;4     string temp;5     temp = string((char*)data,sizes);6     content += temp;7     return sizes;8 9 }

 

转载于:https://www.cnblogs.com/danielStudy/p/6607825.html

你可能感兴趣的文章
前端面试题汇总(持续更新...)
查看>>
如何成为F1车手?
查看>>
QT自定义消息
查看>>
Save (Not Permitted) Dialog Box
查看>>
装饰模式(Decorator)
查看>>
3-11
查看>>
任务13:在Core Mvc中使用Options
查看>>
利用Excel 2010数据透视图实现数字的可视化的图形直观展示
查看>>
Sort Colors
查看>>
HTML文本框水印
查看>>
2048记录反查(ruby)
查看>>
用ssh整合时,用sessionfactory的getCurrentSession()获取不到session
查看>>
【Alpha版本】 第四天 11.10
查看>>
软件公司书籍推荐——按角色划分
查看>>
剑指offer和leetcode都有的_反转链表
查看>>
chrome 插件地址 知乎
查看>>
javascript全局变量都是window对象的属性
查看>>
第八届蓝桥杯省赛第七题---日期问题
查看>>
iview树的修改某个节点,树刷新后自动展开你刚才展开的所有节点
查看>>
oracle服务起不来以及无法监听问题解决
查看>>