首頁 > 後端開發 > Golang > golang gin取得cookie json

golang gin取得cookie json

王林
發布: 2024-02-09 09:39:29
轉載
1099 人瀏覽過

"golang

php小编苹果为您介绍一种简便的方法来使用Golang Gin框架获取cookie和解析JSON数据。Golang是一种强大的编程语言,而Gin则是一个流行的Web框架,其结合起来可以轻松地处理网络请求和数据解析。在这篇文章中,我们将探讨如何使用Gin框架来获取cookie并解析其中的JSON数据,让您能够更加灵活地处理网络请求和数据处理。无论您是Golang新手还是有经验的开发者,都会从本文中获得有用的技巧和知识。让我们开始吧!

问题内容

我使用[电子邮件受保护]

尝试从请求中获取 cookie

Cookie 示例:

key={"ckey": "cvalue"}

代码:

token, err := c.Request.Cookie("key")

返回错误

http:命名的 cookie 不存在

但是没有花括号,工作正常

Cookie 示例:

key=cvalue

接收 token = "key=cvalue"

解决方法

出现此问题的原因是 cookie 值格式。

让我们看看 net/http 中的这些代码

65bd267fe7床

该语句用于去掉字符串开头和结尾的 "{"ckey": "cvalue"} 此字符串中的引号无法删除。

然后它调用另一个函数,该函数是一个循环,迭代每个字符并检查该字符是否为有效字节。

for i := 0; i < len(raw); i++ {
        if !validcookievaluebyte(raw[i]) {
            return "", false
        }
    }
登入後複製

validcookievaluebyte实现

func validcookievaluebyte(b byte) bool {
    return 0x20 <= b && b < 0x7f && b != '"' && b != ';' && b != '\\'
}
登入後複製

并且检查在此处失败。因为我们在{"ckey": "cvalue"}

中有一个"

让我们检查一下示例代码

func main() {
    router := gin.default()

    router.get("/get-cookie", func(c *gin.context) {
        cookie, err := c.request.cookie("key")
        if err != nil {
            c.string(http.statusbadrequest, err.error())
            return
        }
        c.string(http.statusok, fmt.sprintf("token = key=%v", cookie.value))
    })

    router.run(":8080")
}
登入後複製

这会失败

curl --request get \
  --url http://localhost:8080/get-cookie \
  --cookie key='{"ckey": "cvalue"}'
登入後複製

但这会成功

curl --request get \
  --url http://localhost:8080/get-cookie \
  --cookie key='{ckey: cvalue}'
登入後複製

我们可以使用http.cookie将cookie设置为json

val := `{"ckey": "cvalue"}`
cookie := &http.Cookie{
    Name:  "key",
    Value: val,
}
http.SetCookie(c.Writer, cookie)
登入後複製

setcookie 将在保存值之前删除 "

以上是golang gin取得cookie json的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板