天天看點

Gin架構入門01--Http請求Body和Header的擷取

Gin是一個輕量級的Web開發架構,與重量級代表Beego的差別在于,Gin專注于Web 中Http協定處理,資料、表格解析,路由與中間件等,而Beego相對大而全,完整MVC模式,不僅包含了Web協定處理的内容,也包含了資料庫的CURD(Beego光資料庫的驅動都有三種 mysql/Sqlite/Postgres)

首先對于Gin架構的安裝

go get -u github.com/gin-gonic/gin           

複制

package main

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

func main() {
    r := gin.Default()
    r.GET("/ping", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "pong",
        })
    })
    r.Run() // listen and serve on 0.0.0.0:8080
}
           

複制

運作 example.go,可以通過浏覽器來通路 http://localhost:8080/ping

如果一切運作正常,那麼可以看到浏覽器中有Json傳回

Gin擷取Http請求頭Header和Body

  一個HTTP封包由3部分組成,分别是:

  (1)、起始行(start line)

  (2)、首部(header)

  (3)、主體(body)

本次主要關注的是發起請求的封包,使用Postman做為測試工具,發起Http請求

package main

import (
    "fmt"
    "github.com/gin-gonic/gin"
    "io/ioutil"
)

func main() {

    fmt.Printf("launch Gin")

    r := gin.Default()
    r.GET("/get",HandleGet)
    r.POST("/getall",HandleGetAllData)

    //如果使用浏覽器調試,那麼響應Get方法
    //r.GET("/getall",HandleGetAllData)
    r.Run(":9000")

}

func HandleGet(c *gin.Context)  {
    c.JSON(200,gin.H{
        "receive":"65536",
    })

}

func HandleGetAllData(c *gin.Context)  {
   //log.Print("handle log")
    body,_ := ioutil.ReadAll(c.Request.Body)
    fmt.Println("---body/--- \r\n "+string(body))

    fmt.Println("---header/--- \r\n")
    for k,v :=range c.Request.Header {
        fmt.Println(k,v)
    }
    //fmt.Println("header \r\n",c.Request.Header)

    c.JSON(200,gin.H{
        "receive":"1024",
    })

}
           

複制

運作示例:

postman請求内容

Method:post

Body type: raw

Body: username=123

其中紅色框内為HTTP Request Body

橙色框内為 HTTP Request Heade