为了实现一个包含静态文件输出、GET、POST 请求处理(含参数读取)、文件上传和下载功能的 Web API 服务,我们将使用 cpp-httplib 作为 HTTP 服务器库。首先,确保你已经安装了该库。- git clone https://github.com/yhirose/cpp-httplib.git
- cd cpp-httplib
- mkdir build
- cd build
- cmake ..
- make
- 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 |