如何从cppcms的GET/POST请求URI中获取参数列表?
嘿,我来帮你搞定cppCMS里从GET/POST请求中提取参数的事儿!不管是附在URI后面的GET参数,还是藏在请求体里的POST参数,cppCMS都提供了简洁的方法来获取,下面一步步给你说明:
获取GET请求参数
对于像uri_servicename?param1=value1这样的GET请求,你可以直接通过请求对象的get()方法按参数名取值,也可以一次性获取所有参数遍历。
单个参数获取
在你的服务类的main方法里,这样就能拿到param1的值:
#include <cppcms/application.h> #include <cppcms/http_response.h> #include <cppcms/http_request.h> class my_service : public cppcms::application { public: my_service(cppcms::service &srv) : cppcms::application(srv) {} void main(std::string /*unused*/) { // 按参数名获取GET参数值,不存在则返回空字符串 std::string param1_val = request().get("param1"); // 可以先判断参数是否存在再使用 if (!param1_val.empty()) { response().out() << "获取到GET参数param1的值:" << param1_val; } else { response().out() << "请求中没有param1这个GET参数"; } } };
获取所有GET参数
如果需要遍历所有GET参数,你可以通过request().query()拿到查询对象,然后逐个遍历:
void main(std::string /*unused*/) { cppcms::http::query all_get_params = request().query(); for (auto ¶m_pair : all_get_params) { std::string param_name = param_pair.first; std::string param_value = param_pair.second; response().out() << "参数名:" << param_name << ",值:" << param_value << "<br>"; } }
获取POST请求参数
POST参数的获取逻辑和GET类似,只是用post()方法来操作,记得先判断请求方法是不是POST哦:
单个参数获取
void main(std::string /*unused*/) { if (request().request_method() == "POST") { // 按参数名获取POST参数值 std::string param1_val = request().post("param1"); if (!param1_val.empty()) { response().out() << "获取到POST参数param1的值:" << param1_val; } else { response().out() << "POST请求中没有param1这个参数"; } } else { response().out() << "当前请求不是POST方法"; } }
获取所有POST参数
同样可以一次性拿到所有POST参数遍历:
void main(std::string /*unused*/) { if (request().request_method() == "POST") { cppcms::http::form all_post_params = request().post(); for (auto ¶m_pair : all_post_params) { std::string param_name = param_pair.first; std::string param_value = param_pair.second; response().out() << "参数名:" << param_name << ",值:" << param_value << "<br>"; } } }
通用参数获取(兼容GET/POST)
如果你不确定参数是来自GET还是POST,可以用param()方法,它会先查找GET参数,找不到再找POST参数:
std::string param_val = request().param("param1");
另外要提一句:cppCMS会自动帮你处理URL编码的解码工作,所以你拿到的参数值都是已经解码后的正常字符串,不用自己手动处理~
内容的提问来源于stack exchange,提问作者Rajeev Bhat
相关产品推荐
相关产品推荐

