通过C++发布一个web api服务器,其实没有想象的难,一个库就够了 ...

千千梦丶琪  金牌会员 | 2024-2-19 17:30:30 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 882|帖子 882|积分 2646

 
为了实现一个包含静态文件输出、GET、POST 请求处理(含参数读取)、文件上传和下载功能的 Web API 服务,我们将使用 cpp-httplib 作为 HTTP 服务器库。首先,确保你已经安装了该库。
  1. git clone https://github.com/yhirose/cpp-httplib.git
  2. cd cpp-httplib
  3. mkdir build
  4. cd build
  5. cmake ..
  6. make
  7. sudo make install
复制代码
下面是一个简单的示例代码,演示如何使用 cpp-httplib 创建一个包含上述功能的 Web API 服务。
[code]#include #include using namespace httplib;int main() {    // 创建 HTTP 服务器实例    Server svr;    // 处理静态文件请求,将当前目录下的 "static" 文件夹作为静态文件根目录    svr.set_base_dir("./static");    // 处理 GET 请求    svr.Get("/hello", [](const Request& req, Response& res) {        res.set_content("Hello, World!", "text/plain");    });    // 处理带参数的 GET 请求    svr.Get("/greet", [](const Request& req, Response& res) {        auto name = req.get_param_value("name");        if (!name.empty()) {            res.set_content("Hello, " + name + "!", "text/plain");        } else {            res.set_content("Hello, Guest!", "text/plain");        }    });    // 处理 POST 请求    svr.Post("/echo", [](const Request& req, Response& res) {        res.set_content(req.body, "text/plain");    });    // 处理带参数的 POST 请求    svr.Post("/greet_post", [](const Request& req, Response& res) {        auto name = req.get_param_value("name");        if (!name.empty()) {            res.set_content("Hello, " + name + "!", "text/plain");        } else {            res.set_content("Hello, Guest!", "text/plain");        }    });    // 处理文件上传    svr.Post("/upload", [&](const Request& req, Response& res) {        auto file = req.get_file_value("file");        if (file) {            // 将上传的文件保存到服务器端            file->save("./uploads/" + file->filename);            res.set_content("File uploaded successfully", "text/plain");        } else {            res.set_content("File upload failed", "text/plain");        }    });    // 处理文件下载    svr.Get("/download", [&](const Request& req, Response& res) {        // 将服务器端的文件发送给客户端        res.download("./uploads/example.txt");    });    // 启动服务器,监听端口为 8080    svr.listen("localhost", 8080, [](const Request& req, Response& res) {        // 日志记录,可根据实际需要扩展        std::cout

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

千千梦丶琪

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表