【问题标题】:Post request to Golang API to send JSON and stringy-fied JSON向 Golang API 发送请求以发送 JSON 和字符串化 JSON
【发布时间】:2018-06-02 18:24:39
【问题描述】:

在向 Golang API 发出 POST 请求时,如果我发送 stringy-fied JSON 数据,它会返回成功,但是当我发送 JSON 数据时,它会返回 status 403 错误。

请帮助我了解这种行为以及如何使用POST 请求方法发送JSON 数据。

文件:main.go

package main

import (
    "devmgmtv2/auth"
    "github.com/gorilla/handlers"
    "github.com/gorilla/mux"
    "log"
    "net/http"
)

func main() {
    router := mux.NewRouter()
    auth.AuthInit(router)
    ssid.SsidInit(router)
    headersOk := handlers.AllowedHeaders([]string{"X-Requested-With"})
    originsOk := handlers.AllowedOrigins([]string{"*"})
    methodsOk := handlers.AllowedMethods([]string{"GET", "HEAD", "POST", "PUT", "OPTIONS"})
    router.HandleFunc("/auth/login", Login).Methods("POST", "OPTIONS")
    log.Fatal(http.ListenAndServe(":8000", handlers.CORS(headersOk, originsOk, methodsOk)(router)))
}

func Login(w http.ResponseWriter, r *http.Request) {
    //Create User Struct
    var user User
    json.NewDecoder(r.Body).Decode(&user)
    userPassword := getUserPassword(user.User)
    // call get value for that user
    // check for equality if true, return the structure
    // if false return error
    if user.Password == userPassword {
        w.Header().Set("Content-Type", "text/plain")
        w.Write([]byte("success"))
    } else {
        http.Error(w, "Forbidden", http.StatusForbidden)
    }
}

【问题讨论】:

  • “当我以字符串格式(即原始文本)传递我的 JSON 但发送 JSON 时它有效”是什么意思? JSON 是一种文本格式,始终以“字符串”或“文本”形式发送。你做了什么究竟?
  • 当我在做 JSON.stringify(data) 之后发送数据时它工作了,但是当我按原样发送数据时。它没有工作。但它曾经与 NodeJS 服务器一起工作
  • 听起来你的客户端代码没有生成 JSON,那么你的 Go 没有问题。
  • @Flimzy 这是我的身体数据 -> let data = { "user": user, "password": password }
  • 如果你想消费 JSON,你必须发送 JSON。我不知道 Node 如何序列化任意对象。所以:只需发送 JSON(而不是随机垃圾)。

标签: json go post gorilla mux


【解决方案1】:

将 JSON 发送到任何 http 服务器时,您始终必须使用 JSON.stringify()。

不这样做会导致发送[object Object]... 有一些客户端库可以为您完成这种繁重的工作,但在幕后 JSON 始终作为字符串发送。


Node.JS 以相同的方式处理它...它接收字符串表示形式,并且通常在传入请求上运行诸如正文解析器之类的东西以从字符串中提取 JSON。所以它可能会在幕后发生,但它仍然会发生。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-12
    • 2016-03-28
    • 2012-08-08
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    • 2015-06-06
    • 2019-03-29
    相关资源
    最近更新 更多