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
相关产品推荐
相关产品推荐

