golang解析POST请求

我有一个带有有效负载的 HTTP POST 请求


indices=0%2C1%2C2

这是我的 golang 后端代码


err := r.ParseForm()

if err != nil {

    http.Error(w, err.Error(), http.StatusInternalServerError)

    return

}

log.Println("r.PostForm", r.PostForm)

log.Println("r.Form", r.Form)


body, err := ioutil.ReadAll(r.Body)

if err != nil {

    http.Error(w, err.Error(), http.StatusInternalServerError)

    return

}

log.Println("r.Body", string(body))


values, err := url.ParseQuery(string(body))

if err != nil {

    http.Error(w, err.Error(), http.StatusInternalServerError)

    return

}

log.Println("indices from body", values.Get("indices"))

输出:


r.PostForm map[]

r.Form map[]

r.Body indices=0%2C1%2C2

indices from body 0,1,2

为什么 POST 请求没有被 解析r.ParseForm(),而手动解析它却url.ParseQuery(string(body))给出了正确的结果?


绝地无双
浏览 256回答 2
2回答

阿波罗的战车

问题不在于您的服务器代码,这很好,而只是您的客户端,无论它是什么,都缺少Content-TypePOST 表单的正确标头。只需将标题设置为Content-Type: application/x-www-form-urlencoded在你的客户端。

慕的地10843

从您的 http.Request 使用 PostFormValue("params") 从您的参数中获取值err := r.ParseForm() if err != nil{       panic(err)}params := r.PostFormValue("params") // to get params value with key
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go