Mux 处理程序未接收到从 curl post 传递的所有查询参数

Posted

技术标签:

【中文标题】Mux 处理程序未接收到从 curl post 传递的所有查询参数【英文标题】:Mux handler not receiving all the query parameters passed from curl post 【发布时间】:2018-05-21 13:57:16 【问题描述】:

我无法使用 Mux 接收所有查询参数。只收到第一部分

func main() 
    router := mux.NewRouter()
    router.HandleFunc("/resize", resizeImageFromPayload).Methods("POST")
    log.Fatal(http.ListenAndServe(":8080", router))


func resizeImageFromPayload(w http.ResponseWriter, r *http.Request) 
    widthParameter := r.URL.Query().Get("width")
    heightParameter := r.URL.Query().Get("height")
    fmt.Println(r.URL.String())
    fmt.Println(widthParameter)
    fmt.Println(heightParameter)
   //More code..

当我使用 curl curl -XPOST http://localhost:8080/resize?width=100&height=100 -o img_resize.png -F "file=@snap1.png" 调用 api 时,它会打印:

/resize?width=100
100

它似乎省略了 &height=100 部分。有什么想法吗?

提前致谢。

【问题讨论】:

您的 shell 将 & 解释为您打算将 curl 命令分叉到后台。将您的 URL 用引号括起来以查看所需的输出。 在 shell 中运行时,尝试将 URL 用单引号括起来。 感谢它有效 :) 毕竟不相关 这是 GET http 方法,而不是 POST 【参考方案1】:

URL http://localhost:8080/resize?width=100&height=100 包含一个特殊字符 &,它具有 another meaning 到 shell。

为了在 URL 中使用 & 符号 (&) 作为实际字符,您需要将 URL 放在引号中:"http://localhost:8080/resize?width=100&height=100"

【讨论】:

谢谢。这正是cmets中的家伙所说的。标记为已接受的答案。

以上是关于Mux 处理程序未接收到从 curl post 传递的所有查询参数的主要内容,如果未能解决你的问题,请参考以下文章

php post方法传值 接收不到

如何将参数传递给我的处理程序

内部处理程序中的 Gorilla Mux 路由器仅工作一次,然后给出 404 页面未找到

php curl post怎么传值

php中 curl模拟post发送json并接收json(转)

在另一个线程的槽中未接收到从一个线程发送带有 size_t 变量的信号