猿问

Golang 休息 api 和卷曲

我想使用 curl 测试我的 golang rest api。


我曾经这样做的命令:


curl -X POST -H "Content-Type: application/json" -d '{"username":"username","password":"password"}' "http://localhost:8000/api/rooms/signin"

我写的简化版服务器


package main


import (

    "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 8000

POST

parsing success

map[]

path:  /api/rooms/signin

scheme:  



username: []

password: []

我想这是不对的,但我想不出我可能做错了什么。预期的输出是将“密码”和“用户名”字符串作为 golang 服务器的输出。


白衣非少年
浏览 88回答 1
1回答

莫回无

正如评论中所指出的,您接受的是 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]stringegtype SigninBody struct {    Username string `json:"username"`    Password string `json:"password"`}然后json.Unmarshal像这样传递它:var signinBody SinginBodyerr = json.Unmarshal(body, &signinBody)这是一个快速的游乐场
随时随地看视频慕课网APP

相关分类

Go
我要回答