httplib库的安装以及使用

这篇具有很好参考价值的文章主要介绍了httplib库的安装以及使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

安装httplib库

认识httplib库

httplib请求类

 httplib响应类

 httplib中的Server类       

httplib的client类

httplib库搭建简单的服务器

httplib库搭建简单的客户端


安装httplib库

1.进入github,搜索httplib库

httplib库的安装以及使用

 2.下载库

httplib库的安装以及使用

3.下载完毕将库的压缩包传输到linux系统下

httplib库的安装以及使用

 4.解压库

unzip cpp-httplib-master.zip

认识httplib库

  • httplib 库,一个 C++11 单文件头的跨平台 HTTP/HTTPS 库。
  • httplib 库实际上是用于搭建一个简单的 http 服务器或者客户端的库,这种第三方网络库,可以让我们免去搭建服 务器或客户端的时间,把更多的精力投入到具体的业务处理中,提高开发效率

httplib请求类

  • httplib请求类是它包含了http请求中的请求行的请求方法,url,协议版本以及请求报头中的各个响应报头值
namespace httplib{
    //文件信息结构体
    struct MultipartFormData {
        std::string name;        //字段名称
        std::string content;     //文件内容
        std::string filename;    //文件名称
        std::string content_type;//文件类型
   };
  using MultipartFormDataItems = std::vector<MultipartFormData>;

    struct Request {
        std::string method;  //请求方法
        std::string path;    //资源路径
        Headers headers;     //请求报头
        std::string body;    //请求正文
        // for server

        std::string version; //协议版本
        Params params;       //查询字符串
        MultipartFormDataMap files;//保存的是客户端上传的文件信息
        Ranges ranges;       //

        //判断请求报头中有没有 某个字段
        bool has_header(const char *key) const;
        //获取请求报头中对应的字段值
        std::string get_header_value(const char *key, size_t id = 0) const;
        //将key-val的字段值设定在http请求中
        void set_header(const char *key, const char *val);
        //判定是否有对应的文件
        bool has_file(const char *key) const;
        //获取对应的文件信息
        MultipartFormData get_file_value(const char *key) const;
   };

 httplib响应类

httplib类是将响应行,响应报头,响应正文设定到Response类的对象中,然后将Response对象组织成http响应的形式发送给对方。

    struct Response {
        std::string version;   //协议版本号,默认时http1.1
        int status = -1;       //响应状态码,
        std::string reason;    
        Headers headers;       //响应报头
        std::string body;      //响应正文
        std::string location; // 重定向位置

//以key-val将相应的字段设定到响应报头中
 void set_header(const char *key, const char *val);
        void set_content(const std::string &s, const char *content_type);
   };

 httplib中的Server类       


class Server {
        //Handler一个函数指针名称,它的参数是Request,和Response
        using Handler = std::function<void(const Request &, Response &)>;
        //Handlers是一个映射表,它映射对应的请求资源和处理函数映射在一起
        using Handlers = std::vector<std::pair<std::regex, Handler>>;
        //将Get方法的请求资源与处理函数加载到Handlers表中
        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 &Patch(const std::string &pattern, Handler handler);  
        Server &Delete(const std::string &pattern, Handler handler);
        Server &Options(const std::string &pattern, Handler handler);
        //线程池
        std::function<TaskQueue *(void)> new_task_queue;

        //搭建并启动http
        bool listen(const char *host, int port, int socket_flags = 0);
 };

Handler表结构:

httplib库的安装以及使用

 如上面的Handlers表中:

  • 如果http请求的请求方法是GET方法,且请求资源是/hello,那么服务器则会调用Hello函数,构建相对应的http响应。
  • 如果http请求的请求方法是POST方法,且请求资源是/Post,那么服务器则会调用Post函数. 构建相对应的http响应。
  • 如果http请求中的请求方法和请求资源中 只要有一个不存在Handlers表中或者不符合在Handlers表中,则http服务器会返回一个404的http响应。
  • Get("/hello",Hello):将请求方为GET,请求资源/hello,与函数Hello 注册 在Handlers表中
  • Post("/post",Post):将请求方法POST,请求资源/post,与函数Post 注册 在Handlers表中

线程池的工作

  • 当服务器收到一个http请求的时候,就会将该http请求放入到线程池中,线程池中的线程就会调用相对应的函数解析http请求形成Request类。
  • 在Handler映射表中,如果有相对应请求方法和请求资源有相对应的映射函数,则会调用相对应的映射函数,并构建好http响应.
  • 当处理函数调用完后,则将构建好的http响应发送给客户端。

httplib的client类

   class Client {
        //构造一个客户端对象,传入服务器Ip地址和端口
        Client(const std::string &host, int port);
        //向服务器发送GET请求
        Result Get(const char *path, const Headers &headers);
        //向服务器发送Post请求
        //path是路径,body是request请求路径
        //content_length是正文大小
        //content_type是正文的类型
        Result Post(const char *path, const char *body, size_t content_length,
              const char *content_type);
        
        //以Post方法上传文件
        Result Post(const char *path, const MultipartFormDataItems &items);
   }

httplib库搭建简单的服务器

搭建服务器的步骤:

  • 利用httplib库定义server对象
  • 在Handler表结构中注册 请求资源的处理函数
  • 用listen启动服务器
   #include<iostream>    
  #include"httplib.h"    
  using namespace std;    
      
W>void Hello(const httplib::Request& req,httplib::Response& res){    
    res.set_content("Hello world","text/plain");    
    res.status=200;    
  }    
      
      
  void File(httplib::Request req,httplib::Response res){
    //获取字段为file的文件
    const auto& file=req.get_file_value("file");    
  
    std::cout<<file.filename<<endl;        
    std::cout<<file.content<<endl;    
  }    
      
  int main(){    
    httplib::Server server;//定义sercer对象    
    //注册处理函数    
    server.Get("/hi",Hello);    
    server.Post("/file",File);    
    server.listen("0.0.0.0",8081);//启动服务器    
    return 0;    
  }    

 文章来源地址https://www.toymoban.com/news/detail-412814.html

httplib库的安装以及使用

注意:

  •  注册处理函数中的Request参数需要定义为const
  • 注册处理函数中Request和Response参数都需要是引用,否则浏览器会接受不到正文内容.

httplib库搭建简单的客户端

#include"httplib.h"    
#define IP "119.23.41.13"    
#define PORT 8081    
using namespace std;    
    
int main(){    
  //建立客户端对象    
  httplib::Client client(IP,PORT); 
  //单个文件信息组织   
  httplib::MultipartFormData file;    
  file.name="file";        
  file.content="hello world";    
  file.filename="Hello.txt";    
  file.content_type="text/plain";    
  
  //MultipartFormDataItems对象可以存储多个文件信息
  httplib::MultipartFormDataItems item;    
  item.push_back(file);    
  //请求服务器上/file资源,发送item文件集合给服务器
  auto result=client.Post("/file",item);     
  return 0;                                                                                                                                 
}    

httplib库的安装以及使用 

 

 

到了这里,关于httplib库的安装以及使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深度学习入门--认识深度学习以及安装工具

    感谢李沐老师的教学视频以及《动手学深度学习》,视频总时长47h https://zh-v2.d2l.ai/chapter_preface/index.html https://www.bilibili.com/video/BV1if4y147hS/?spm_id_from=333.999.0.0vd_source=0cafd28c011c5492e6d7e39f1fd256d9 介绍深度学习经典和最新模型LeNet,ResNet,LSTM,BERT,.. 机器学习基础 损失函数、目标函数、

    2024年02月07日
    浏览(57)
  • 用VS2019图形学安装openGL库的详细步骤以及报错处理

    链接:https://pan.baidu.com/s/1F1gmz9a2uJ5FShRccZRqZw  提取码:lyzz 将文件保存下来放在新建的一个文件夹内,建议不要放在C盘上。然后将文件解压,可以看到如下五个文件: 1文件glut.h放在下面路径中: 在目录C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.29.30037includ

    2024年02月04日
    浏览(52)
  • vue常见日期库的差异以及使用方法

    dayjs: https://day.js.org/zh-CN/ 注意: 24h制时 HH:mm:ss 其中 m,s小写 否则不准确 日期大写:YYYY-MM-DD dateformat : https://www.npmjs.com/package/dateformat 注意: 24h制时 HH:MM:ss 其中 M大写,s小写 否则不准确 日期大写:yyyy-mm-dd momentjs : http://momentjs.cn/docs/ 注意: 24h制时 HH:mm:ss 其中 m,s小写

    2024年02月14日
    浏览(39)
  • Windows下C++静态链接库的生成以及使用

    这篇文章简单讨论一下Windows下如何使用VS生成和使用C++静态链接库,示例使用VS2022环境。 先创建C++项目-静态库 然后将默认生成的.h和.cpp文件清理干净,当然你也可以选择保留。 然后创建需要的.h和.cpp文件。 看下代码 很简单的代码,就是提供一个打印字符串的接口。编译一

    2024年02月05日
    浏览(37)
  • 【linux深入剖析】深入理解软硬链接 | 动静态库的制作以及使用

    🍁你好,我是 RO-BERRY 📗 致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 软链接和硬链接是在Linux系统中常见的文件链接方式。 软链接(Symbolic Link): 软链接是一个指向目标文

    2024年04月13日
    浏览(45)
  • 解决pycharm中CV2库的下载问题,以及Miniconda的安装和在pycharm中的配置

    本文是我在学习图像处理与机器视觉时,采用pycharm进行图像处理时遇到的问题,水平有限,如有不对的地方欢迎大家批评指正,共同探讨。本文使用的pycharm版本为2021.3中文版。 在学习图像处理与机器视觉时,使用到了pycharm对图像进行采样和量化。在pycharm中输入import CV2时,

    2024年02月02日
    浏览(71)
  • linux 迁移home目录以及修改conda中pip的目录,修改pip安装路径

    1) sudo rsync -av /home/lrf /data/home/lrf 将/home目录下的文件进行复制(假设机械硬盘挂载在/data目录下)** 2) usermod -d /data/home/lrf -m lrf 修改用户$HOME变量** 3) vi /etc/passwd 查看对应用户的$HOME变量是否成功修改 ps当使用conda时,可以 vi ~/miniconda3/envs/envs_name/bin/pip 进行修改 4.1 python

    2024年04月10日
    浏览(49)
  • PyCharm下载和安装教程以及相关配置(导入第三方库的软件包等配置)Windows版下载

    PyCharm是一种Python IDE(Integrated Development Environment,集成开发环境),带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试、版本控制。此外,该IDE提供了一些高级功能,以用于支持

    2023年04月08日
    浏览(86)
  • 【Linux拓展】ncurses库的安装和使用 {ncurses库的安装方法,ncurses库的使用手册,基于终端的贪吃蛇游戏}

    ncurses库是一个用于创建基于终端的交互式应用程序的库。它提供了一套API,用于处理终端界面的输入和输出,以及控制终端的光标位置、颜色、窗口等。 使用ncurses库,您可以在终端中创建复杂的文本界面,包括窗口、菜单、按钮、文本框等。您可以使用函数来控制光标的位

    2024年02月08日
    浏览(40)
  • C++ 使用nlohmann/json和cpp-httplib 完成post请求

    最近公司要我项目里弄http 请求,我没用过。探索了这么点东西。 第一步:用vscode  和它的 rest client插件完成post。 在文件里填入大数据同事给我的内容,右键send request,就拉取到了这个车的点位们。  第二步;开始写代码,文件目录如下,include里放了json的头文件。     代

    2024年02月11日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包