亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 122 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號