Mongoose回调中hm->query.ptr未获取完整查询字符串的问题
问题原因与解决办法
问题根源
你遇到的情况是shell解析了curl命令中的&特殊字符。在Ubuntu默认的bash shell中,&用于将命令放到后台执行,所以当你直接运行:
curl http://127.0.0.1?Domain=Test&User=David
shell会把&作为分隔符,仅将curl http://127.0.0.1?Domain=Test作为前台命令执行,User=David被当成独立的后台命令。实际发送给Mongoose服务器的请求URL只有http://127.0.0.1?Domain=Test,因此hm->query只能获取到这部分内容。
解决办法
1. 正确传递完整URL给curl
通过以下两种方式避免shell解析&:
- 用引号包裹整个URL:
或curl "http://127.0.0.1?Domain=Test&User=David"curl 'http://127.0.0.1?Domain=Test&User=David' - 转义
&符号:curl http://127.0.0.1?Domain=Test\&User=David
2. 更便捷的参数提取方式
即使拿到完整的查询字符串,Mongoose也提供了专门的APImg_http_get_var来直接提取单个参数,无需手动处理整个字符串:
#include "mongoose.h" static void cb(struct mg_connection *c, int ev, void *ev_data, void *fn_data) { if (ev == MG_HTTP_MSG) { struct mg_http_message *hm = (struct mg_http_message *) ev_data; char domain[100], user[100]; // 提取Domain参数 mg_http_get_var(&hm->query, "Domain", domain, sizeof(domain)); // 提取User参数 mg_http_get_var(&hm->query, "User", user, sizeof(user)); printf("Domain=%s, User=%s\n", domain, user); } }
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

