cpp-httplib 是一個C++語言編寫的Web Server庫,它可以幫助您在短時間內構建一個高效的Web服務應用程序。cpp-httplib使用簡單,支持多種HTTP請求類型,並包含錯誤處理程序。本篇文章將從以下幾個方面詳細闡述cpp-httplib的使用方法和應用場景:
一、基本使用
1、導入cpp-httplib:
#include <httplib.h>
2、創建一個 HTTP Server:
httplib::Server svr;
3、在 HTTP Server 上註冊 GET 方法:
svr.Get("/", [](const httplib::Request &req, httplib::Response &res) {
res.set_content("Hello World!", "text/plain");
});
4、啟動 HTTP Server:
svr.listen("localhost", 1234);
上面的代碼將在本地啟動一個Server並監聽埠號為1234,然後它將註冊URI 「/」 的GET方法,並返回Hello World!。
二、HTTP 請求和響應
1、根據 URI 動態獲取請求的參數:
svr.Post("/submit", [](const httplib::Request &req, httplib::Response &res) {
auto name = req.get_param_value("name");
auto age = req.get_param_value("age");
res.set_content("Name: " + name + ", Age: " + age, "text/plain");
});
2、通過 Query String 或 JSON 主體獲取請求的數據:
svr.Post("/submit", [](const httplib::Request &req, httplib::Response &res) {
auto qs_name = req.get_query_value("name");
auto qs_age = req.get_query_value("age");
nlohmann::json json;
json["name"] = req_json.value("name", "No Name");
json["age"] = req_json.value("age", 0);
auto req_body = json.dump();
res.set_content("Name: " + qs_name + ", Age: " + qs_age + ", Request Body: " + req_body, "text/plain");
});
3、設置響應頭:
res.set_header("Server", "MyServer/1.0");
4、設置響應主體:
res.set_content("Hello World!", "text/plain");
三、高級功能
1、文件服務:
httplib::Server svr;
svr.set_file_extension_and_mimetype_mapping({
{"htm", "text/html"},
{"html", "text/html"},
{"css", "text/css"},
{"gif", "image/gif"},
{"jpg", "image/jpeg"},
{"png", "image/png"},
{"js", "application/javascript"}
});
svr.set_mount_point("/", "./public_html");
svr.listen("localhost", 1234);
2、驗證器:
struct ValidUser {
std::string user_name, password;
bool operator==(const ValidUser& rhs) const {
return user_name == rhs.user_name && password == rhs.password;
}
};
class Authenticator : public httplib::Authentication {
public:
Authenticator() {}
bool operator()(const httplib::Request& req) override {
auto auth_headers = req.get_header_value("Authorization");
if (!auth_headers.empty()) {
auto creds = split_basic_auth_header(auth_headers);
for (const auto& user : m_validUsers) {
if (creds.first == user.user_name && creds.second == user.password) {
return true;
}
}
}
return false;
}
void add_user(const std::string& user_name, const std::string& password) {
m_validUsers.push_back(ValidUser{user_name, password});
}
private:
std::vector<ValidUser> m_validUsers;
};
httplib::Server svr;
Authenticator auth;
auth.add_user("admin", "123456");
svr.set_authenticator("localhost", auth);
svr.get("/", [](const httplib::Request& /*req*/, httplib::Response& res) {
res.set_content("OK", "text/plain");
});
svr.listen("localhost", 1234);
四、應用場景
1、RESTful API:
cpp-httplib支持GET、POST、PUT、DELETE 以及其他HTTP請求類型,因此可輕鬆創建RESTful API。
2、輕量級Web服務:
cpp-httplib是一個非常輕巧的Web伺服器,不需要安裝其他依賴項,非常適合快速構建Web服務應用程序。
3、文件服務:
cpp-httplib可以用於提供靜態文件服務,使客戶端能夠獲取Web伺服器上的文件資源。
總之,cpp-httplib 是一個更現代的、易於使用的 Web 伺服器框架,它旨在幫助開發人員輕鬆構建高效的 Web 服務應用程序。如果你正在尋找一個靈活的、根據需要進行擴展的 Web 伺服器框架,那麼 cpp-httplib 可能是你需要的工具。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/246506.html