一、介绍下这个三个 静态库(你也可以用动态库自行百度,这里只讲静态库)
1.libcurl主要是实现及客户端的http协议,可以通过这个库进行post、get操作。
2.jsoncpp和json11其实就是你post、get操作发送json数据后,拿到的数据可以反序列解析成类似对象或者数组的形式直接取到参数对应的值,有点map的感觉,但是又不是。当需要向一个接口post、get 数据不是参数而是一个json数据时,可以用这两个库进行序列化成json数据。其实jsoncpp和json11差不多,只是用法不太一样,反序列json我更喜欢jsoncpp可以一直类似用数组形式取数据,json11需要转化很多中间变量才能一层层蜕皮拿到你要的参数值。
二、首先导入libcurl静态库、jsoncpp静态库或者json11库
注意编译好的这个静态库(.lib)一定要是你需要的对应的程序编译的版本,如果你是在debug模式64位编译你的程序,那你必须引入的是在这条件下编译好的第三方静态库。
三、这里主要讲一下我的编译环境vs2015 语言c++
1.针对jsoncpp,json11序列化失败遇到的坑说下,由于我第三方接口返回给我的json头没有写明json格式,我用vs2015拿下来的数据在{ }前面有字符乱码,导致序列化失败。遇到序列化失败可以试试把拿到的字符串前遇到的第一个{前的的字符处理再进行序列化。
2.jsoncpp序列化之后从json::value取String或者Cstring类型的数据一定要记得先判断这个值是不是空值,如果是空值你还调用String或者Cstring转换,程序直接崩溃
3.libcurl注意内存泄漏问题,用完一定记得把curl句柄释放。
4.从接口拿到UTF-8的json数据中包含中文时,vs2015显示肯定乱码,字符集编码的问题,你需要将utf-8转换为GBK格式编码才能正常显示中文,网上一些转换代码有内存泄漏其次是写的也很脑残,我把代码贴上来。
5.libcurl需要保持长链接,目前我用的方式是存取一个cookie文本文件,每次post、get前读取cookie文本,libcurl也提供了相应的函数。
6.想用好libcurl,一定要去看官方文档。放上链接
https://curl.haxx.se/libcurl/c/example.html