为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 POST 请求中获取参数

如何在 POST 请求中获取参数

Go
偶然的你 2022-07-04 16:12:21
我正在尝试获取 POST 请求中的参数,但我无法做到,我的代码是:package mainimport (    "fmt"    "log"    "net/http")func main() {    http.HandleFunc("/", hello)    fmt.Printf("Starting server for testing HTTP POST...\n")    if err := http.ListenAndServe(":8080", nil); err != nil {        log.Fatal(err)    }}func hello(w http.ResponseWriter, r *http.Request) {    if r.URL.Path != "/" {        http.Error(w, "404 not found.", http.StatusNotFound)        return    }    switch r.Method {    case "POST":        // Call ParseForm() to parse the raw query and update r.PostForm and r.Form.        if err := r.ParseForm(); err != nil {            fmt.Fprintf(w, "ParseForm() err: %v", err)            return        }        name := r.Form.Get("name")        age := r.Form.Get("age")        fmt.Print("This have been received:")        fmt.Print("name: ", name)        fmt.Print("age: ", age)    default:        fmt.Fprintf(w, "Sorry, only POST methods are supported.")    }}我正在终端中发出 POST 请求,如下所示:curl -X POST -d '{"name":"Alex","age":"50"}' localhost:8080然后输出是:This have been received:name: age: 为什么它不采用参数?我做错了什么?
查看完整描述

1 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

当您将 body 作为json对象传递时,您最好定义一个Go与该对象匹配的结构并将 body 解码request为对象。


type Info struct {

    Name string

    Age  int

}

info := &Info{}

if err := json.NewDecoder(r.Body).Decode(info); err != nil {

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

    return

}

_ = json.NewEncoder(w).Encode(info)

您可以在此处找到完整的工作代码。


$ curl -X POST -d '{"name":"Alex","age":50}' localhost:8080

这个POST请求现在工作正常。


您可以根据需要修改Go结构和响应object。


查看完整回答
反对 回复 2022-07-04
  • 1 回答
  • 0 关注
  • 225 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信