golang/gin之请求头相关用法笔记

878 阅读1分钟

import (
	"fmt"
	"strings"

	"github.com/gin-gonic/gin"
)

func main() {
	r := gin.Default()
	r.GET("/", func(c *gin.Context) {
		//首字母大小写不区分  单词与单词之间用-连接,并且获取的是第一个value
		//这是用于获取一个请求头
		// fmt.Println(c.GetHeader("User-Agent"))
		// fmt.Println(c.GetHeader("user-agent"))
		// fmt.Println(c.GetHeader("user-Agent"))
		// fmt.Println(c.GetHeader("User-agent"))

		// 获取所有请求头,Header是一个普通的map[string]
		// fmt.Println(c.Request.Header)

		// 获取单个请求头,和c.GetHeader("User-Agent")的区别是这里必须分大小写,因为相当于取map[string]这个map的值
		fmt.Println(c.Request.Header["User-Agent"])
		//这个就可以免大小写
		fmt.Println(c.Request.Header.Get("User-Agent"))
		c.JSON(200, gin.H{
			"msg": "成功",
		})
	})
	// 请求头的各种获取方式,如何让爬虫和普通用户区别对待
	r.GET("/index", func(c *gin.Context) {
		s := c.GetHeader("user-agent")
		// 1、用正则去匹配
		// 2、字符串的包含匹配
		if strings.Contains(s, "python") {
			//爬虫来了,如果响应头里含有python就是爬虫
			c.JSON(0, gin.H{
				"gun": "这是响应给爬虫的数据",
			})
			return
		}
		c.JSON(0, gin.H{
			"data": "这是响应给用户的数据",
		})
	})
	// 设置响应头
	r.GET("/res", func(c *gin.Context) {
		//设置响应头
		c.Header("Token", "this is xiangyingtou")
		//如果改了Content-Type,浏览器就不会认为你是json了,很多时候浏览器下载奇怪东西就是请求头的问题
		// c.Header("Content-Type", "this is xiangyingtou")
		c.JSON(0, gin.H{
			"data": "看看响应头",
		})
	})
	r.Run(":9090")
}