[C++][第三方库][httplib]详细讲解

DieSnowK 2024-10-11 12:35:01 阅读 98

目录

1.介绍2.安装3.类与接口4.使用


1.介绍

C++ HTTP库(<code>cpp-httplib)是一个轻量级的C++ HTTP客户端/服务器库,它提供了简单的API来创建HTTP服务器和客户端,支持同步和异步操作特点

轻量级cpp-httplib的设计目标是简单和轻量,只有一个头文件包含即可,不依赖于任何外部库跨平台:它支持多种操作系统,包括Windows、Linux、MacOS同步和异步操作:提供了同步和异步两种操作方式,允许开发者根据需要选择支持HTTP/1.1:实现了HTTP/1.1协议,包括持久连接和管道化Multipart from-data:支持发送和接收multipart/form-data类型的请求,这对于文件上传非常有用SSL/TLS:通过使用OpenSSLmbedTLS库,cpp-httplib支持HTTPS和WSS简单易用:API设计简洁,易于学习和使用性能:尽管是轻量级库,但性能表现良好,适合多种应用场景社区活跃cpp-httplib有一个活跃的社区,不断有新的功能和改进被加入


2.安装

git clone https://github.com/yhirose/cpp-httplib.git


3.类与接口

httplib回调处理流程:在一个哈希表内,维护某个方法内对应请求资源的对应处理方法

namespace httplib

{

struct Request

{

std::string method;

std::string path;

Headers headers;

std::string body;

Params params;

};

struct Response

{

std::string version;

int status = -1;

std::string reason;

Headers headers;

std::string body;

void set_content(const std::string &s,

const std::string &content_type);

void set_header(const std::string &key,

const std::string &val);

};

class Server

{

using Handler = std::function<void(const Request &, Response

&)>;

Server &Get(const std::string &pattern, Handler handler);

Server &Post(const std::string &pattern, Handler handler);

Server &Put(const std::string &pattern, Handler handler);

Server &Delete(const std::string &pattern, Handler handler);

bool listen(const std::string &host, int port);

};

class Client

{

explicit Client(const std::string &host, int port);

Result Get(const std::string &path, const Headers &headers);

Result Post(const std::string &path, const std::string &body,

const std::string &content_type);

Result Put(const std::string &path, const std::string &body,

const std::string &content_type);

Result Delete(const std::string &path, const std::string &body,

const std::string &content_type);

};

}


4.使用

服务器搭建流程

实例化服务器对象Server注册回调函数,告诉服务器收到哪个请求,应该使用哪个回调函数进行处理启动服务器

#include "httplib.h"

int main()

{

// 1.实例化服务器对象

httplib::Server svr;

// 2.注册回调函数 void(const httplib::Request&, const httplib::Response&)

svr.Get("/SnowK", [](const httplib::Request& req, httplib::Response& resp)

{

std::cout << req.method << std::endl;

std::cout << req.path << std::endl;

for(auto& iter : req.headers)

{

std::cout << iter.first << ": " << iter.second << std::endl;

}

std::string body("<html><body><h1>Hello SnowK<h1><body><html>");

resp.set_content(body, "text/html");

resp.status = 200;

});

// 3.启动服务器

svr.listen("0.0.0.0", 9200);

return 0;

}



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。