C++要实现http网络连接,需要借助第三方库,libcurl使用起来还是很方便的

环境:win32 + vs2015

如果要在Linux下使用,基本同理

1,下载编译libcurl

下载curl源码,找到vs工程,按照x86 x64 并对应debug和release编译出静态库lib

2,构建工程

1)curl头文件和lib拷贝到工程目录

2)配置附加包含目录libcurl中的include和附加库目录libcurl中的lib目录

3)添加预编译宏USE_OPENSSL和CURL_STATICLIB

4)添加如依赖库

crypt32.lib
ws2_32.lib
wldap32.lib
libcurl.lib

注意版本对应

3,代码示例

  1. #include <iostream>
  2. #include <string>
  3. #include "curl/curl.h"
  4. using namespace std;
  5. #pragma comment(lib, "ws2_32.lib")
  6. #pragma comment(lib, "wldap32.lib")
  7. #pragma comment(lib, "libcurl.lib")
  8. // reply of the requery
  9. size_t req_reply(void *ptr, size_t size, size_t nmemb, void *stream)
  10. {
  11. cout << "----->reply" << endl;
  12. string *str = (string*)stream;
  13. cout << *str << endl;
  14. (*str).append((char*)ptr, size*nmemb);
  15. return size * nmemb;
  16. }
  17. // http GET
  18. CURLcode curl_get_req(const std::string &url, std::string &response)
  19. {
  20. // init curl
  21. CURL *curl = curl_easy_init();
  22. // res code
  23. CURLcode res;
  24. if (curl)
  25. {
  26. // set params
  27. curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); // url
  28. curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false); // if want to use https
  29. curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false); // set peer and host verify false
  30. curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
  31. curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
  32. curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, req_reply);
  33. curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&response);
  34. curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
  35. curl_easy_setopt(curl, CURLOPT_HEADER, 1);
  36. curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3); // set transport and time out time
  37. curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);
  38. // start req
  39. res = curl_easy_perform(curl);
  40. }
  41. // release curl
  42. curl_easy_cleanup(curl);
  43. return res;
  44. }
  45. // http POST
  46. CURLcode curl_post_req(const string &url, const string &postParams, string &response)
  47. {
  48. // init curl
  49. CURL *curl = curl_easy_init();
  50. // res code
  51. CURLcode res;
  52. if (curl)
  53. {
  54. // set params
  55. curl_easy_setopt(curl, CURLOPT_POST, 1); // post req
  56. curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); // url
  57. curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postParams.c_str()); // params
  58. curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false); // if want to use https
  59. curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false); // set peer and host verify false
  60. curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
  61. curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
  62. curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, req_reply);
  63. curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&response);
  64. curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
  65. curl_easy_setopt(curl, CURLOPT_HEADER, 1);
  66. curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3);
  67. curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);
  68. // start req
  69. res = curl_easy_perform(curl);
  70. }
  71. // release curl
  72. curl_easy_cleanup(curl);
  73. return res;
  74. }
  75. int main()
  76. {
  77. // global init
  78. curl_global_init(CURL_GLOBAL_ALL);
  79. // test get requery
  80. string getUrlStr = "http://cn.bing.com/images/trending?form=Z9LH";
  81. string getResponseStr;
  82. auto res = curl_get_req(getUrlStr, getResponseStr);
  83. if (res != CURLE_OK)
  84. cerr << "curl_easy_perform() failed: " + string(curl_easy_strerror(res)) << endl;
  85. else
  86. cout << getResponseStr << endl;
  87. // test post requery
  88. string postUrlStr = "https://www.baidu.com/s";
  89. string postParams = "f=8&rsv_bp=1&rsv_idx=1&word=picture&tn=98633779_hao_pg";
  90. string postResponseStr;
  91. auto res = curl_post_req(postUrlStr, postParams, postResponseStr);
  92. if (res != CURLE_OK)
  93. cerr << "curl_easy_perform() failed: " + string(curl_easy_strerror(res)) << endl;
  94. else
  95. cout << postResponseStr << endl;
  96. // global release
  97. curl_global_cleanup();
  98. system("pause");
  99. return 0;
  100. }
    • get和post可以用于请求html信息,也可以请求xml和json等串
    • 可以添加自定义的header 域和cookies
    • 这是libcurl的简单接口,基本等同于阻塞试请求,libcurl有高阶的异步并发接口,运用更复杂

http://blog.csdn.net/u012234115/article/details/71371962

C/C++使用libcurl库发送http请求(get和post可以用于请求html信息,也可以请求xml和json等串)的更多相关文章

  1. (转) c/c++调用libcurl库发送http请求的两种基本用法

    libcurl主要提供了两种发送http请求的方式,分别是Easy interface方式和multi interface方式,前者是采用阻塞的方式发送单条数据,后者采用组合的方式可以一次性发送多条数 ...

  2. 大概看了一天python request源码。写下python requests库发送 get,post请求大概过程。

    python requests库发送请求时,比如get请求,大概过程. 一.发起get请求过程:调用requests.get(url,**kwargs)-->request('get', url ...

  3. 【python接口自动化】- 使用requests库发送http请求

    前言:什么是Requests ?Requests 是⽤Python语⾔编写,基于urllib,采⽤Apache2 Licensed开源协议的 HTTP 库.它⽐ urllib 更加⽅便,可以节约我们⼤ ...

  4. 『居善地』接口测试 — 4、Requests库发送GET请求

    目录 1.使用Requests库发送带参数的GET请求 2.查看GET请求的内容 3.带请求头.参数的Get请求 Requests库GET请求是使用HTTP协议中的GET请求方式对目标网站发起请求. ...

  5. 『居善地』接口测试 — 5、使用Requests库发送POST请求

    目录 1.请求正文是application/x-www-form-urlencoded 2.请求正文是raw (1)json格式文本(application/json) (2)xml格式文本(text ...

  6. C++ 用libcurl库进行http通讯网络编程

    使用libcurl完成http通讯,很方便而且是线程安全,转载一篇比较好的入门文章 转载自 http://www.cnblogs.com/moodlxs/archive/2012/10/15/2724 ...

  7. C++ 用libcurl库进行http通讯网络编程(转)

    转载:http://www.cnblogs.com/moodlxs/archive/2012/10/15/2724318.html 目录索引: 一.LibCurl基本编程框架 二.一些基本的函数 三. ...

  8. C++ 用libcurl库进行http通讯网络编程[转]

    http://www.cnblogs.com/moodlxs/archive/2012/10/15/2724318.html 目录索引: 一.LibCurl基本编程框架 二.一些基本的函数 三.cur ...

  9. C/C++ 用libcurl库进行http通讯网络编程

    C/C++ 用libcurl库进行http通讯网络编程 目录索引: 一.LibCurl基本编程框架 二.一些基本的函数 三.curl_easy_setopt函数部分选项介绍 四.curl_easy_p ...

随机推荐

  1. eclipse 远程debug tomcat web项目

    1.首先须要在linux系统tomcat/bin文件夹下配置catalina.sh这个文件里添加: CATALINA_OPTS="-Xdebug  -Xrunjdwp:transport=d ...

  2. js进阶 11-12 jquery如何实现节点的删除和复制

    js进阶 11-12  jquery如何实现节点的删除和复制 一.总结 一句话总结:remove().detach().empty()方法 1.jquery删除节点中的remove()方法和detac ...

  3. html5-8 如何控制html5中的视频标签和音频标签

    html5-8 如何控制html5中的视频标签和音频标签 一.总结 一句话总结:找到视频或者音频的element对象,然后查手册看对应的方法或者属性就可以,里面有控制的. 1.如何控制html5中的视 ...

  4. 小强的HTML5移动开发之路(48)——(小练习)新闻订阅系统【1】

    一.总体设计 二.数据库设计 --新闻类别表 create table news_cate( news_cateid int primary key auto_increment, news_icon ...

  5. [Win 8/WP 8]简单实现弹出页更换头像的功能

    在Win 8应用里,对弹出页(Popup)的灵活操作必不可少,下面我们就来简单实现一个. 一.先让Popup弹出到指定位置 先来看看效果图,如图[1]: 下面是前端代码,代码段[1]: <Gri ...

  6. Android开发:使用ViewDragHelper实现抽屉拉伸效果

    事实上,有非常多方法能够实现一个Layout的抽屉拉伸效果,最常常的方法就是自己定义一个ViewGroup,然后控制点击事件.控制移动之类的,这样的方法的代码量多,并且实现起来复杂,后期维护添加其它效 ...

  7. 三星语音AI助理背后的华人身影—73岁科技人三度创业成功(孙子兵法:道、天、地、将、法)

    我绝对不当老二,也不当老大,我要当霸主!”说这句话的是富迪科技董事长黄炎松.他还把“独霸”当作公司愿景宣言,大剌剌的放在美国总公司进门最显眼的墙上.   集微网消息,据台湾商业周刊报道,黄炎松,是台湾 ...

  8. js进阶 9-12 js如何实现级联菜单 (章节测试)

    js进阶 9-12  js如何实现级联菜单 (章节测试) 一.总结 一句话总结: 1.js如何实现级联菜单 ? 二维数组,以第一级菜单的文本值做键,以对应的二级菜单选项的文本做值 2.用哪个属性可以获 ...

  9. Erlang Process input queue

    http://www.cnblogs.com/me-sa/archive/2011/11/05/erlang0012.html Erlang进程有自己的消息队列来保存接收到的消息,新接收到的消息放在队 ...

  10. Cocos2d-x V3.2+Cocos Studio1.6 实现一个简单的uibutton点击功能

    好久没写博客了 这几天在学习cocos studio,这个软件可以很方便的设计游戏的一些界面,并导入到cocos2dx中,今天就用button来做个样例 首先我们打开Cocos Studio1.6,选 ...