You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 13:17:11