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

Golang 休息 api 和卷曲

Golang 休息 api 和卷曲

Go
白衣非少年 2023-05-08 15:16:45
我想使用 curl 测试我的 golang rest api。我曾经这样做的命令:curl -X POST -H "Content-Type: application/json" -d '{"username":"username","password":"password"}' "http://localhost:8000/api/rooms/signin"我写的简化版服务器package mainimport (    "fmt"    "log"    "net/http"    "github.com/gorilla/mux")func main() {    fmt.Println("Listening on port 8000")    router := mux.NewRouter()    router.HandleFunc("/api/rooms/signin", Signin)    log.Fatal(http.ListenAndServe(":8000", router))}func Signin(w http.ResponseWriter, r *http.Request) {    if r.Method == "POST" {        fmt.Println("POST")        if err := r.ParseForm(); err != nil {            fmt.Println("parsing failed")            return        }        fmt.Println("parsing success")        fmt.Println(r.Form)        fmt.Println("path: ", r.URL.Path)        fmt.Println("scheme: ", r.URL.Scheme)        username := r.FormValue("username")        password := r.FormValue("password")        fmt.Println(username)        fmt.Println(password)        fmt.Println("username:", r.Form["username"])        fmt.Println("password:", r.Form["password"])        return    }}问题是我得到一个空表格——这是我得到的输出Listening on port 8000POSTparsing successmap[]path:  /api/rooms/signinscheme:  username: []password: []我想这是不对的,但我想不出我可能做错了什么。预期的输出是将“密码”和“用户名”字符串作为 golang 服务器的输出。
查看完整描述

1 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

正如评论中所指出的,您接受的是 JSON 有效负载而不是 POST 表单。这里有一个小片段可以帮助您处理 JSON,尽管 Internet 上有很多。


func Signin(w http.ResponseWriter, r *http.Request) {


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

    if err != nil {

        // error handling

    }


    params := make(map[string]string)

    err = json.Unmarshal(body, &params)

    if err != nil {

        // error handling

    }


    fmt.Println("username:", params["username"])

    fmt.Println("password:", params["password"])


}

我建议创建一个具体的结构而不是一个map[string]stringeg


type SigninBody struct {

    Username string `json:"username"`

    Password string `json:"password"`

}

然后json.Unmarshal像这样传递它:


var signinBody SinginBody

err = json.Unmarshal(body, &signinBody)

这是一个快速的游乐场


查看完整回答
反对 回复 2023-05-08
  • 1 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

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