Http 如何在POST请求中获取参数

Http 如何在POST请求中获取参数,http,go,post,Http,Go,Post,我正在尝试获取POST请求中的参数,但无法获取,我的代码是: package main import ( "fmt" "log" "net/http" ) func main() { http.HandleFunc("/", hello) fmt.Printf("Starting server for testing HTTP POST...\n")

我正在尝试获取POST请求中的参数,但无法获取,我的代码是:

package main

import (
    "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.")
    }
}
我在终端中提出如下邮寄请求:

curl -X POST -d '{"name":"Alex","age":"50"}' localhost:8080
然后输出是:

This have been received:name: age: 

为什么不采用这些参数?我做错了什么?

当您将身体作为
json
对象传递时,最好定义一个与该对象匹配的
Go
结构,并将
请求
身体解码到该对象

类型信息结构{
名称字符串
年龄智力
}
信息:=&info{}
如果err:=json.NewDecoder(r.Body).Decode(info);呃!=零{
Error(w,err.Error(),http.StatusInternalServerError)
返回
}
_=json.NewEncoder(w).Encode(info)
您可以找到整个工作代码

$curl-X POST-d'{“name”:“Alex”,“age”:50}'本地主机:8080
POST
请求现在运行正常


您可以根据自己的喜好修改
Go
结构和响应
对象。

您需要首先执行
r.ParseForm()
,它从URL解析原始查询并填充表单。在case:POST之后,在if条件中,您将发送一篇包含json数据的帖子。设置
Content-Type
标题并使用
json.Decode
解析go中的数据。或者您可以将curl命令更改为以urlencoded形式发布,以匹配代码期望的内容:curl-X post-d name=Alex-d age=50 localhost:8080这是否回答了您的问题?非常感谢您的任命,非常感谢!