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

Mux Handler无法接收curl POST请求传递的全部查询参数

问题原因分析

你的问题根本不是Golang Mux框架的问题,而是shell对&符号的解析规则导致的!

当你在shell里执行curl -XPOST http://localhost:8080/resize?width=100&height=100 ...时,&会被shell当成后台运行命令的分隔符——也就是说,shell会把http://localhost:8080/resize?width=100作为一个后台任务单独执行,后面的height=100 -o img_resize.png -F "file=@snap1.png"会被当成另一个独立的命令,这就导致服务器只收到了width=100这一个参数,height参数完全没被包含在请求里。

你可以留意下执行curl命令后的shell输出,应该会看到后台任务的进程提示,这也能佐证这个问题。

解决办法

有两种简单的方式可以规避这个shell解析问题:

1. 用引号包裹完整URL

将包含&的URL放在单引号或双引号内,让shell把整个URL当成一个整体,不再解析其中的&符号:

curl -XPOST "http://localhost:8080/resize?width=100&height=100" -o img_resize.png -F "file=@snap1.png"

或者使用单引号:

curl -XPOST 'http://localhost:8080/resize?width=100&height=100' -o img_resize.png -F "file=@snap1.png"

2. 转义&符号

在&前面加上反斜杠\,明确告诉shell这是一个普通字符,不是后台命令的分隔符:

curl -XPOST http://localhost:8080/resize?width=100\&height=100 -o img_resize.png -F "file=@snap1.png"
代码验证

其实你的Go代码是完全没问题的!当你用上述正确的curl命令发送请求后,r.URL.Query().Get("height")就能正常获取到100的值,日志里的r.URL.String()也会输出完整的/resize?width=100&height=100,两个参数都能正常打印。

内容的提问来源于stack exchange,提问作者zakaria amine

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:23:14