ESP-IDF HTTPS服务器通配符URI匹配配置及编译报错问题问询
报错原因
你出现编译错误的核心原因是赋值对象错误:uri_match_fn 并非 httpd_ssl_config_t 结构体的直接成员,而是该结构体内嵌的 httpd_config_t 类型子结构体 httpd 的成员,你直接对外层 conf 结构体赋值不存在的成员,自然会触发编译报错。修改官方头文件属于非规范操作,会影响后续ESP-IDF版本升级兼容性,不建议使用。
正确配置方法
按照以下步骤操作即可在不修改官方源码的前提下实现通配符URI匹配:
- 第一步:给内嵌的httpd子结构体赋值匹配函数
初始化httpd_ssl_config_t后,修改匹配函数的赋值语句为:conf.httpd.uri_match_fn = httpd_uri_match_wildcard; - 第二步:注册带通配符的URI handler
注册URI时,匹配规则填写为/command/on/*即可匹配所有该前缀的POST请求,注册示例:httpd_uri_t command_on_uri = { .uri = "/command/on/*", .method = HTTP_POST, .handler = your_post_handler, .user_ctx = NULL }; httpd_register_uri_handler(server, &command_on_uri); - 第三步:在请求处理函数中提取数字参数
在handler函数内获取完整请求URI,裁剪掉前缀/command/on/后转换为整数,再判断是否在1-32的合法范围内即可,示例代码片段:esp_err_t your_post_handler(httpd_req_t *req) { // 提取URI后缀数字 const char *prefix = "/command/on/"; int num = atoi(req->uri + strlen(prefix)); if (num < 1 || num > 32) { httpd_resp_send_err(req, HTTPD_400_BAD_REQUEST, "Invalid parameter"); return ESP_FAIL; } // 后续业务逻辑 return ESP_OK; }
内容的提问来源于stack exchange,提问作者Dansen
相关产品推荐
相关产品推荐

