项目Httplib库的简单学习和使用

Posted zhaocx111222333

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了项目Httplib库的简单学习和使用相关的知识,希望对你有一定的参考价值。

httplib库是什么:

Httplib库是一个 C++11 单文件头文件跨平台 HTTP/HTTPS 库。在使用的时候仅仅添加头文件即可。在Linux和Windows平台都可以使用。

我们只用使用httblib提供的函数即可完成HTTP客户端和服务端的搭建。
我的库来自于github:

源码简单分析:

在httplib.h的主题框架中主要包含了:
struct Request 请求数据类

struct Response回复数据类

class Server服务端类

class Client客户端类

Request 请求数据类
包含了请求方法
请求路径
头部
请求正文
(加了一些设置头部字段的函数)

class Response 回复数据类
包含了版本信息
响应状态码
状态码描述
HTTP头部信息
正文信息
重定向的新位置信息

我们可以看到这个结构体封装了http相应格式

cass Server 服务端类

在源码中包含了各种类型响应结构:
主要就是Get,Post,Put,delete和listen监听端口

class Client 客户端类:
这是常用的接口的信息
对应各种请求方法

基于Json的一次练习:

结合Json序列化完成一次练习。
链接: Json.

#include "cpp-httplib"
void test(const Request &req,Response &rsp){
   Json::Value val;			//搭配json序列化
   Json::Reader read;
   bool ret=reader.parse(req.body,val);	//req.body是一个字符串类型,将请求的正文信息用parse获取到val中
   if(ret==false){
     rsp.status=400;			//返回状态码
     Json::Value reason;		//利用value组织返回正文信息
     reason["result"]=false;
     reason["reason"]="parse error!";
     Json::FastWriter writer;
     rsp.body=writer.write(reason);
     rsp.set_header("Content-Type","application/json");//组织相应http头信息
     return;
   }
   ...数据处理...
   rsp.status=200;//正确处理的响应状态码
   					//也可以根据自己的需要进行如上的value序列化正文
   					//返回响应的头部字段
   return;
}

int main(){
	Server srv;  // 创建服务端对象
	srv.Get("/",test);	//get请求的回调函数test
	srv.listen("0.0.0.0",9000); 
}

延伸:

我们可以看到httplib使用poll实现多路转接:

还有线程池的应用:

httplib库的更能非常庞大,后续使用还需进一步钻研。

以上是关于项目Httplib库的简单学习和使用的主要内容,如果未能解决你的问题,请参考以下文章

项目Httplib库的简单学习和使用

httplib库的安装以及使用

httplib库的安装以及使用

开源代码:Http请求封装类库HttpLib介绍使用说明

Python网页分析httplib库的重定向处理

Python爬虫学习: httplib