赞
踩
简要:
cpp-httplib是一个c++封装的http库,使用这个库可以在windows平台下完成http客户端、http服务端的搭建。
在p2p点对点下载器的项目中,我们只需用到cpp-httplib中的 httplib.h这个头文件,所以我们在这里只讲一下httplib搭建tcp客户端与服务器的原理。
httplib.h头文件的组成主要包含有以下四个类
类 | 类名 |
---|---|
class Request | 请求数据类 |
class Response | 回复数据类 |
cass Server | 服务端类 |
class Client | 客户端类 |
发送请求类的组成
class Request
{
std::string method; // 请求方法
std::string path; // 请求路径
map<std::string, std::string> param; // 查询字符串(查询字符串中)
map<std::string, std::string> headers;// 键值对头部
std::string body; //正文
};
回复数据类的组成
class Response
{
int status; //返回的状态码
map<std::string,std::string> headers; //返回的价值对头部
std::string body; //正文
};
服务端类的组成
class Server()
{
Get(); // 请求方法 Get
Post(); // 请求方法 Post
Put(); // 请求方法 Put
....
listen(host,port); // 监听(传入某个主机,端口)
};
客户端类的组成
class Client
{
//创建client
Client(host,port);
Get()
Post()
Put()
...
};
main.cpp中使用httplib搭建了一个http服务器
#include "cpp-httplib"
void helloworld(Request& req, Response& rsp)
{
}
int main()
{
Server srv; // 创建服务端对象
srv.Get("/",helloworld);
srv.listen("0.0.0.0",9000); // 0.0.0.0 本机的任意一块网卡地址, 9000端口
}
Get表达式: Get( 请求资源路径path, 回调函数指针)
Server对象中 :Get接口的作用就是将资源路径以及请求方法还有回调函数,在srv对象中的map表中存储起来。
srv对象中有一张map表,在这里的就是对应的是"/" , GET, hello
资源路径 | 请求方法 | 回调函数地址 |
---|---|---|
“/” | GET | hello |
注意:
服务端首先Get(),先注册对应关系,先告诉自己的服务器,当我们遇到什么请求方法,请求什么资源,在回调什么函数。将浙西全部都记录在map中。当listen监听的时候,才建立起服务端。
若服务端收到了http请求,解析之后。若请求中的path,对应了Get接口传入的path(也就是能在map中找到对应关系),则服务端会创建一个线程回调这个传入的函数helloworld()对这次的请求进行业务处理。
服务器Server的
listen(0.0.0.0,9000)接口功能: 搭建tcp服务器,监听本机所有网卡9000端口,等待客户端传来数据。若接收到了客户端的请求数据,则服务端创建一个线程去处理这个请求。
#include "httplib.h" void helloword(const httplib::Request &req, httplib::Response &rsp) { printf("httplib server recv a req: %s\n ", req.path.c_str() ); rsp.set_content("<html><h1> 武汉, 加油!</h1></html>", "text/html");//最后一个参数是正文类型 rsp.status = 200; } int main() { httplib::Server srv; srv.Get("/",helloword); srv.listen("0.0.0.0", 9000); system("pause"); }
向网址中输入127.0.0.1:9000 我们就可以看见结果了。
(127.0.0.1 本机的回环网卡地址, 9000端口)
结果:
链接: https://pan.baidu.com/s/1ikxlF9vccR_A-UPs794Fqw
提取码:1x8w
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。