如何访问 POST 请求中嵌入的键值

我正在 Golang 中制作轮盘赌 REST API:


package main


import (

    "fmt"

    "io/ioutil"

    "log"

    "net/http"

    "github.com/gorilla/mux"

)


func handleRequests() {

    // creates a new instance of a mux router

    myRouter := mux.NewRouter().StrictSlash(true)

    

    myRouter.HandleFunc("/spin/", handler).Methods("POST")

    log.Fatal(http.ListenAndServe(":10000", myRouter))

}


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


    reqBody, _ := ioutil.ReadAll(r.Body)


    s := string(reqBody)

    fmt.Println(s)

}


func main() {

    fmt.Println("Rest API v2.0 - Mux Routers")

    handleRequests()

}

主程序


我正在使用 Python 脚本测试 POST 方法:


import requests


url = 'http://localhost:10000/spin/'


myobj = {'bets':[

                {

                    'amount' : 10,

                    'position' : [0,1,2]

                },

                {

                    'amount' : 20,

                    'position' : [10]

                }

            ]

}


x = requests.post(url, data = myobj)


print(x.text)

test.py


当我运行测试脚本时。服务器收到我的 POST 请求。请求正文是: bets=amount&bets=position&bets=amount&bets=position


'amount'问题是和键的值'position'不存在。


我的问题是 - 我如何发出/处理 POST 请求,以便我能够访问嵌入键的值'amount'以及'position'Go 服务器上的处理函数中的值,以便我可以将此信息放入结构体的实例中。


慕斯709654
浏览 105回答 2
2回答

皈依舞

如果打印出请求的正文/标头,问题就出在 python 方面:print requests.Request('POST', url, data=myobj).prepare().bodyprint requests.Request('POST', url, data=myobj).prepare().headers# bets=position&bets=amount&bets=position&bets=amount# {'Content-Length': '51', 'Content-Type': 'application/x-www-form-urlencoded'}data使用x-www-form-urlencoded编码,因此需要一个键/值对的平面列表。您可能想要json表示您的数据:print requests.Request('POST', url, json=myobj).prepare().bodyprint requests.Request('POST', url, json=myobj).prepare().headers# {"bets": [{"position": [0, 1, 2], "amount": 10}, {"position": [10], "amount": 20}]}# {'Content-Length': '83', 'Content-Type': 'application/json'}使固定:x = requests.post(url, json = myobj) // `json` not `data`最后,值得检查Content-TypeGo 服务器端的标头,以确保获得所需的编码(在本例中application/json)。

白衣非少年

我认为您需要一个结构来解组数据。我认为这段代码可以帮助您。package mainimport (    "encoding/json"    "fmt"    "github.com/gorilla/mux"    "io/ioutil"    "log"    "net/http")type Body struct {    Bets []Persion  `json:"bets"`}type Persion struct{    Amount int  `json:"amount"`    Position []int  `json:"position"`}func handleRequests() {    // creates a new instance of a mux router    myRouter := mux.NewRouter().StrictSlash(true)    myRouter.HandleFunc("/spin/", handler).Methods("POST")    log.Fatal(http.ListenAndServe(":10000", myRouter))}func handler(w http.ResponseWriter, r *http.Request) {    reqBody, _ := ioutil.ReadAll(r.Body)     bodyObj :=&Body{}    err:=json.Unmarshal(reqBody,bodyObj)    if err!=nil{        log.Println("%s",err.Error())    }    //s := string(reqBody)    fmt.Println(bodyObj.Bets[0].Amount)}func main() {    fmt.Println("Rest API v2.0 - Mux Routers")    handleRequests()}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python