高效輕量的C++ HTTP服務:cpp-httplib使用指南

文章目錄

    • httplib介紹與安裝
    • 使用案例

httplib介紹與安裝

C++ HTTP 庫(cpp-httplib)是一個輕量級的 C++ HTTP 客戶端/服務器庫,它提供了簡單的 API 來創建 HTTP 服務器和客戶端,支持同步和異步操作。以下是一些關于cpp-httplib 的主要特點:

1.輕量級:cpp-httplib 的設計目標是簡單和輕量,只有一個頭文件包含即可,不依賴于任何外部庫。

2.跨平臺:它支持多種操作系統,包括 Windows、Linux 和 macOS。

3.同步和異步操作:庫提供了同步和異步兩種操作方式,允許開發者根據需要選擇。

4.支持 HTTP/1.1:它實現了 HTTP/1.1 協議,包括持久連接和管道化。

5.Multipart form-data:支持發送和接收 multipart/form-data 類型的請求,這對于文件上傳非常有用。

6.SSL/TLS 支持:通過使用 OpenSSL 或 mbedTLS 庫,cpp-httplib 支持 HTTPS 和 WSS。

7.簡單易用:API 設計簡潔,易于學習和使用。

8.性能:盡管是輕量級庫,但性能表現良好,適合多種應用場景。

9.社區活躍:cpp-httplib 有一個活躍的社區,不斷有新的功能和改進被加入。

安裝

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

接口介紹

請求中包含請求方法,請求的資源路徑,請求頭部,請求正文和查詢字符串。

struct Request
{std::string method;std::string path;Headers headers;std::string body;Params params;
};

響應中包含HTTP協議版本,響應狀態碼,響應狀態碼描述,響應頭部,響應正文。

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);
};   

服務器句柄,通過GET/POST/PUT/DELETE函數處理對應的HTTP請求,設置請求路徑和對應的回調函數即可,通過listen函數進行對應端口的監聽。

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);
};

客戶端句柄同樣也是GET/POST/PUT/DELETE發起對應的請求,參數為請求路徑,請求正文和請求的類型。

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);
};

使用案例

main.cc

#include "../common/httplib.h"
#include <iostream>int main()
{httplib::Server server;// using Handler = std::function<void(const Request &, Response &)>;server.Get("/hello",[](const httplib::Request & req, httplib::Response & resp){std::cout << "method: " << req.method << std::endl;std::cout << "path: " << req.path << std::endl;std::string body = "<html><body><h1>Hello World</h1></body></html>";resp.set_content(body,"text/html");resp.status = 200;});server.listen("0.0.0.0",8080);return 0;
}

makefile

main:main.ccg++ -o $@ $^ -std=c++17 -lpthread.PHONY:clean
clean:rm -rf main

makefile```makefile
main:main.ccg++ -o $@ $^ -std=c++17 -lpthread.PHONY:clean
clean:rm -rf main

image-20250214203709570

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/94126.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/94126.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/94126.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

24 SAP CPI 調用SAP HTTP接口

SAP CPI 訪問SAP接口一般用RFC或者HTTP,個人在項目中兩種方法都用過,最后還是傾向于HTTP的方式,此方式易于維護,統一管理,接口搭建比較方便。 讀者朋友可網上自行搜索"SAP 發布HTTP接口",SAP CPI調用SAP發布的HTTP接口。 配置CPI接口前,需要將CPI的證書導入…

C/C++常用字符串函數

一、字符串函數介紹&#xff1a; 字符串作為程序中常用的數據類型&#xff0c;學會對字符串進行處理是作為一名C/C程序員的基本功&#xff0c;我們要學會使用相關函數&#xff0c;并且對重點函數要會自己手動實現&#xff08;下文對重點函數有實現代碼以及相關示例&#xff09…

YOLO的Python實現以及 OpenCV

YOLO的Python實現以及 OpenCV Darknet 實現 YOLO 從頭開始開發 YOLO模型不容易&#xff0c;所以我們要使用預訓練模型在項目里進行目 標檢測。你可以在 https://pjreddie.com里到所有可用的預訓練模型。這是 Joseph C. Redmon的主頁&#xff0c;他是 Darknet的維護者。 注意 …

譯|Netflix 數據平臺運營中基于機器學習自動修復系統

來自上傳文件中的文章《Evolving from Rule-based Classifier: Machine Learning Powered Auto Remediation in Netflix Data Platform》 本文介紹了Netflix如何將基于規則的錯誤分類器與機器學習服務集成&#xff0c;實現Spark作業失敗的自動修復。技術亮點包括結合規則和ML智…

PAES算法求解 ZDT1 雙目標優化問題

前言 提醒&#xff1a; 文章內容為方便作者自己后日復習與查閱而進行的書寫與發布&#xff0c;其中引用內容都會使用鏈接表明出處&#xff08;如有侵權問題&#xff0c;請及時聯系&#xff09;。 其中內容多為一次書寫&#xff0c;缺少檢查與訂正&#xff0c;如有問題或其他拓展…

邏輯回歸的應用

一參數邏輯回歸參數及多分類策略等完整解析LogisticRegression 初始參數聲明LogisticRegression(penaltyl2, dualFalse, tol0.0001, C1.0, fit_interceptTrue, intercept_scaling1, class_weightNone, random_stateNone, solverliblinear, max_iter100, multi_classovr, verbos…

C語言(長期更新)第7講:VS實用調試技巧

C語言&#xff08;長期更新&#xff09; 第7講 VS實用調試技巧 跟著潼心走&#xff0c;輕松拿捏C語言&#xff0c;困惑通通走&#xff0c;一去不回頭~歡迎開始今天的學習內容&#xff0c;你的支持就是博主最大的動力。 目錄 C語言&#xff08;長期更新&#xff09; 第7講 …

CONTRASTIVE-KAN:一種用于稀缺標記數據的網絡安全半監督入侵檢測框架

研究背景與挑戰? ?工業環境需求?: 第四次工業革命中,物聯網(IoT)和工業物聯網(IIoT)的普及使網絡安全成為關鍵挑戰。 入侵檢測系統需實時性高,尤其對關鍵基礎設施(如燃氣管道)的快速攻擊檢測至關重要。 ?核心問題?: ?標簽數據稀缺?:工業系統多數時間處于正常…

綜合:單臂路由+三層交換技術+telnet配置+DHCP

技術考核1 實驗拓撲&#xff1a;實驗需求 1.按照圖示配置IP地址設備名 2.在SW1和SW2之間配置鏈路聚合增加鏈路帶寬&#xff0c;提高可靠性 3.PC5和PC6屬于VLAN10&#xff0c; PC7和PC8屬于VLAN20 4.SW1和SW2屬于二層交換機&#xff0c;SW3為三層交換機&#xff08;VLAN100用于對…

工業火焰識別漏報率↓78%!陌訊多模態融合算法實戰解析

原創聲明&#xff1a;本文技術方案解析基于陌訊技術白皮書2025版 標簽&#xff1a;#陌訊視覺算法 #火焰識別優化 #工業安全監控 #邊緣計算優化一、行業痛點&#xff1a;工業火災監控的漏檢危機據《2025工業安全白皮書》統計&#xff0c;化工場景傳統火焰識別系統漏報率高達35%&…

C++引用:高效安全的別名機制詳解

目錄 一、引用的概念 二、引用的特性 1、定義時必須初始化 2、一個變量可以有多個引用 3、引用一旦綁定實體就不能更改 三、const引用&#xff08;常引用&#xff09; 1、const引用的基本特性 2、臨時對象與const引用 3、臨時對象的特性 4、const 引用作為函數形參 …

大語言模型API付費?

下面是目前主流 大語言模型 API 的付費情況總覽&#xff1a; &#x1f9e0; 一、主要大語言模型 API&#xff1a;是否付費對比 提供方模型是否免費限制 / 說明OpenAIGPT-3.5 / GPT-4 / GPT-4o? 付費為主有免費額度&#xff08;如 ChatGPT 免費版&#xff09;&#xff0c;API …

巧用Wisdom SSH:容器化運維與傳統運維的抉擇

巧用Wisdom SSH&#xff1a;容器化運維與傳統運維的抉擇 在當下的技術領域&#xff0c;容器化運維與傳統運維是運維人員面臨的兩大主要方向&#xff0c;對于從業者來說&#xff0c;如何抉擇至關重要&#xff0c;而Wisdom SSH在其中能發揮顯著作用。 傳統運維&#xff1a;基石…

API征服者:Python抓取星鏈衛星實時軌跡

API征服者&#xff1a;Python抓取星鏈衛星實時軌跡從基礎調用到工業級衛星追蹤系統實戰指南一、太空數據時代&#xff1a;星鏈衛星的全球覆蓋??星鏈衛星網絡規模??&#xff1a;已發射衛星數量&#xff1a;4,000目標衛星總數&#xff1a;42,000軌道高度&#xff1a;340km - …

《深潛React列表渲染:調和算法與虛擬DOM Diff的優化深解》

當用戶在內容平臺無限滑動&#xff0c;或是在管理系統中處理成百上千條數據時&#xff0c;每一次無卡頓的交互&#xff0c;都是調和算法與虛擬DOM Diff機制協同工作的成果。理解這兩者的底層邏輯&#xff0c;不僅是性能優化的鑰匙&#xff0c;更是從“使用框架”到“理解框架”…

自動化與配置管理工具 ——Ansible

一、Ansible 概述1.1 核心特性Ansible 是一款開源的自動化運維工具&#xff0c;采用無代理&#xff08;Agentless&#xff09;架構&#xff0c;通過 SSH 協議實現對遠程節點的管理。其核心特性包括&#xff1a;無代理架構&#xff1a;被管理節點無需安裝代理軟件&#xff0c;降…

Effective C++ 條款18:讓接口容易被正確使用,不易被誤用

Effective C 條款18&#xff1a;讓接口容易被正確使用&#xff0c;不易被誤用核心思想&#xff1a;設計接口時&#xff0c;應使正確使用方式直觀自然&#xff0c;同時通過類型系統、行為約束等手段主動預防常見錯誤&#xff0c;減少用戶犯錯的可能性。 ?? 1. 接口誤用的常見陷…

nodejs讀寫文件

1.讀文件 node有很多模塊&#xff0c;可在node模塊查看相應模塊&#xff1b; var fsrequire(fs)fs.readFile(./src/a.doc,utf8,function(err,data){// 如果發生錯誤&#xff0c;data是undefined 如果成功 err為null console.log(err); console.log(data); }) 2.寫文件 var…

ConcurrentHashMapRedis實現二級緩存

1. 為什么使用ConcurrentHashMap&#xff1f;在Java中&#xff0c;ConcurrentHashMap 是一個線程安全且高效的哈希表實現&#xff0c;廣泛用于高并發場景。將其用作一級緩存的原因主要包括以下幾點&#xff1a;1.1. 線程安全性ConcurrentHashMap 是線程安全的&#xff0c;支持多…

Mysql集群技術

實驗在RHEL7中做&#xff0c;因為9中缺少了一個關鍵的高可用組件環境&#xff1a;兩臺數據庫&#xff0c;內存和CPU要多一點主流是MYSQL&#xff08;開源&#xff09;&#xff0c;Oracle收費較貴RHEL7中直接用make編譯是有問題的&#xff0c;所以需要要gcc工具做好前置準備&…