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的详细内容,更多请关注编程网其它相关文章!