Maison > développement back-end > Golang > Golang Gin obtient un cookie JSON

Golang Gin obtient un cookie JSON

王林
Libérer: 2024-02-09 09:39:29
avant
1101 Les gens l'ont consulté

"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
        }
    }
Copier après la connexion

validcookievaluebyte实现

func validcookievaluebyte(b byte) bool {
    return 0x20 <= b && b < 0x7f && b != '"' && b != ';' && b != '\\'
}
Copier après la connexion

并且检查在此处失败。因为我们在{"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")
}
Copier après la connexion

这会失败

curl --request get \
  --url http://localhost:8080/get-cookie \
  --cookie key='{"ckey": "cvalue"}'
Copier après la connexion

但这会成功

curl --request get \
  --url http://localhost:8080/get-cookie \
  --cookie key='{ckey: cvalue}'
Copier après la connexion

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

val := `{"ckey": "cvalue"}`
cookie := &http.Cookie{
    Name:  "key",
    Value: val,
}
http.SetCookie(c.Writer, cookie)
Copier après la connexion

setcookie 将在保存值之前删除 "

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal