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 上的她获取不了。