vs中libcurl和jsoncpp库的简单使用

vs中libcurl和jsoncpp库的简单使用

目录

vs中libcurl和jsoncpp库的简单使用

Libcurl

初始化

设置参数

发送请求和数据处理

总结

Jsoncpp


  • Libcurl

使用libcurl分几个步骤。它分为单线程和多线程,这里用单线程(简单)。本文参考文心一言示例代码进行介绍。

  1. 初始化

要使用libcurl库,首先需要引入库文件。

#include <curl/curl.h>

初始化创建一个curl对象以便后续操作。

CURL* curl;//创建curl类型的指针,因为函数curl_easy_init()返回的为指向curl结构体的指针

curl = curl_easy_init();//初始化创建一个curl结构体,并返回指向它的指针;初始化失败时会返回null

CURLcode res;//用于存储后续网络操作执行返回的信息便于诊断网络是否连通

在后续的代码编写过程中,可以通过函数curl_easy_setopt()和函数curl_easy_perform()分别进行参数的设置和网络操作的实现。而在执行完各个操作以后,需要使用函数curl_easy_cleanup()将curl资源进行清理,否则将出现各种严重后果。

  1. 设置参数

设置参数使用函数curl_easy_setopt(),这里只介绍一些基本的参数:

curl_easy_setopt(curl,option,x)

·curl为前面创建的curl结构体指针。

·option为要操作的各个参数。

·x为根据option需要填写的参数。

-关于option参数介绍:

CURLOPT_CUSTOMREQUEST请求方法,x为字符串(POST/GET)。

CURLOPT_URL设置要请求的url地址,x类型为字符串。

CURLOPT_HTTPHEADER设置请求头部,x为curl_list结构体的指针,curl_list是curl中用于存储链表的结构体,通常用于存储http头部信息:

struct curl_slist* headers = NULL;  headers=curl_slist_append(headers,"Content-Type:application/json;charset=UTF-8");

其中curl_list_append()的作用为向curl_list中加入头部数据,可以分多次加入:

headers=curl_slist_append(headers,"Content-Type:application/json");

headers=curl_slist_append(headers,"charset=UTF-8");

对于已经存在的头可以重复设置其值,也可将其值设置为空:

headers=curl_slist_append(headers,"Content-Type:application/x-www-form-urlencoded");//重新赋值

headers=curl_slist_append(headers,"Content-Type:");//设置为空

当它不再被需要时,应该使用函数进行清理:curl_slist_free_all(headers)

CURLOPT_POSTFIELDS要发送的数据,x为要传输的数据,为字符串类型。

CURLOPT_WRITEDATA一般与下面CURLOPT_WRITEFUNCTION一起使用,用于存储连接后返回的数据,x为字符串类型的指针,可以将服务器返回的数据存入指针指向的字符串变量中。

CURLOPT_WRITEFUNCTION一般与上面CURLOPT_WRITEDATA一起使用,用于存储连接后返回的数据,x为一个回调函数,这个函数需要自己写,它的格式为:

inline size_t onWriteData(void* buffer, size_t size, size_t nmemb, void* userp)

作用是处理服务器返回的数据,将其存储于你的变量中。其中onWriteData为函数名,buffer为服务器返回的数据,size为单个数据块的大小,nmemb为数据块的数量,userp为你要存储数据的地址指针;它们的名称和变量不是固定的,可以随自己的意愿更改以便于更加精确地处理返回的信息,如下为专门处理返回的为char类型切要存储到string类型变量的声明:

size_t loaddata(char* data, size_t size, size_t num, std::string* localstr)

在curl中还有别的option需要用到回调函数,需要实现具体功能的话可以自己去查。

  1. 发送请求和数据处理

设置完成参数以后即可开始发送请求:

res = curl_easy_perform(curl);

在执行该函数时前面设置的参数会生效,网络请求返回的结果会被保存到result中,是一段json字符串如果需要方便处理需要下载专门的json库进行处理。函数返回的值可作为连接是否正常进行的依据,如0为正常。

  1. 总结

上述只是简单介绍一下liburl的用法为后续调用文心一言api做铺垫。想学习详细知识可以访问网站:Curl(C++)使用教程_c++ curl-CSDN博客

  • Jsoncpp

先声明各个工具变量,声明存储的变量:

Json::Value json_message;//存储json字符串

std::string error;//存储解析错误信息

Json::CharReaderBuilder crbuilder;//创建工程对象,用于设置解析字符的各种方式

//这里程序较为简单,创建它只是为了得到reader用于解析数据

crbuilder["emitUTF8"] = true;//设置json读取时支持utf8编码

std::unique_ptr<Json::CharReader> reader(crbuilder.newCharReader());//创建阅读工具对象

这其中utf8编码可以不设置,json_message可以直接用cout输出来查看其中的成员。

在声明完成后使用parse函数来进行字符串解析:

reader->parse(result.data(), result.data() + result.size(), &json_message, &error);

通过reader将result中的数据解析放在json_message中方便查看,将错误信息存入error。result.data()返回指向result内部数据的指针,指向result的第一位,result.size()返回字符串大小,加上result.data()则指向最后一位字符。现在即可通过json_message来查看各个信息:

std::string answer = json_message["result"].asString();

这里“result”是其中的成员,asString()作用是将读到的数据转化为string类型的。

如果希望更详细的了解jsoncpp可以查阅其他大佬写的文档:c++json库(jsoncpp)简单使用(包含下载使用方法,中文错误解决方案)_json cpp-CSDN博客JsonCpp 使用指导-菜鸟笔记 (coonote.com)

文章性质为本人学习后做的笔记,如有侵权请联系本人删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值