Gin 如何同时获取 GET 数据和 POST 数据?

这个示例主要是演示了 POST 请求既有查询字符串参数又有 application/x-www-form-urlencoded 数据的时候。

也就是提交表单的时候 URL 上有查询字符串。

POST /post?id=1234&page=1 HTTP/1.1
Content-Type: application/x-www-form-urlencoded

name=manu&message=this_is_great

发起 cURL 的请求字符串如下

curl --request POST \
  --url 'http://localhost:8080/post?id=1234&page=1' \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data name=manu \
  --data message=this_is_great

完整范例代码如下

package main

import (
    "net/http"

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

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

    router.POST("/post", func(c *gin.Context) {

        query_id := c.Query("id")
        query_page := c.DefaultQuery("page", "0")
        query_name := c.Query("name")
        query_message := c.Query("message")

        post_id := c.PostForm("id")
        post_page := c.DefaultPostForm("page", "0")
        post_name := c.PostForm("name")
        post_message := c.PostForm("message")
        c.JSON(http.StatusOK, gin.H{
            "query_id":      query_id,
            "query_page":    query_page,
            "query_name":    query_name,
            "query_message": query_message,
            "post_id":       post_id,
            "post_page":     post_page,
            "post_name":     post_name,
            "post_message":  post_message,
        })
    })
    router.Run(":8080")
}

请求结果如下

{
  "post_id": "",
  "post_message": "this_is_great",
  "post_name": "manu",
  "post_page": "0",
  "query_id": "1234",
  "query_message": "",
  "query_name": "",
  "query_page": "1"
}

从结果中可以看出 c.Query()c.DefaultQuery() 只能获取查询字符串参数,别的参数获取不了。 而 c.PostForm() 之类的这只能用于获取 POST 表单数据,其它数据也获取不了。

注意: c.PostForm() 只能获取放在请求体(body) 里的数据,放在 URL 上的她获取不了。

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.