下面是一个用go编写的服务器。
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
fmt.Fprintf(w,"%s",r.Method)
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
如何提取发送到localhost:8080/something
URL的POST
数据?
7条答案
按热度按时间mmvthczy1#
就像这样:
wwtsj6pe2#
引用
http.Request
的文档8xiog9wr3#
要从post请求中提取一个值,你必须首先调用
r.ParseForm()
。[This][1]解析来自URL的原始查询并更新r.Form。对于POST或PUT请求,它还将请求主体解析为表单,并将结果放入r.PostForm和r.Form。POST和PUT主体参数优先于r.Form中的URL查询字符串值。
现在,
r.From
是客户端提供的所有值的Map,要提取特定值,可以使用r.FormValue("<your param name>")
或r.Form.Get("<your param name>")
。您也可以使用
r.PostFormValue
。ijnw1ujt4#
对于POST、PATCH和PUT请求:
首先,我们调用
r.ParseForm()
,它将POST请求主体中的任何数据添加到r.PostForm
Map对于POST、GET、PUT等(对于所有请求):
Form
方法相反,r.FormMap将为所有请求填充(不管它们的HTTP方法如何),并且包含来自任何请求主体的表单数据和任何查询字符串参数,因此,如果我们的表单被提交到/snippet/create?foo=bar,我们也可以通过调用r.Form.Get来获得foo参数的值(“foo”)。注意,如果发生冲突,请求主体值将优先于查询字符串参数。
FormValue
和PostFormValue
方法net/http包还提供了方法r.FormValue()和r.后表单值这些函数本质上是调用r.ParseForm的快捷函数()给你的,然后分别从r.Form或r.PostForm获取相应的字段值。我建议避免使用这些快捷方式,因为它们会自动忽略r.ParseForm返回的任何错误()。这并不理想-这意味着我们的应用程序可能会遇到错误,用户可能会失败,但没有反馈机制让用户知道。
所有的样本都来自关于Go -X1 E0 F1 X的最好的书。这本书可以回答你所有的问题!
68de4m5k5#
对于正常请求:
对于多部分请求:
m3eecexj6#
您可以在aapi playground here中运行代码
将此添加到您的访问URL:/我的路径参数?参数1 =我的查询参数
我想暂时保留上面的链接,因为它给了你一个运行代码的好地方,我相信能够看到它的运行是有帮助的,但是让我来解释一些典型的情况,你可能需要一个后置参数。
开发人员将post数据拉到后端服务器有几种典型的方式,通常从请求中拉文件时会使用多部分表单数据,或者大量数据,所以我看不出这有什么关系,至少在问题的上下文中是这样。他正在寻找post参数,这通常意味着表单post数据。通常表单post参数是在web表单中发送到后端服务器的。
1.当用户将登录表单或注册数据从html提交回golang时,在本例中来自客户端的Content Type头通常是application/x-www-form-urlencoded,我相信这就是问题所问的内容,这些是form post参数,使用r.FormValue(“param 1”)提取。
1.在从post主体获取json的情况下,您将获取整个post主体并将原始json解组为一个结构体,或者在从请求主体、内容类型头部application/json提取数据后使用库解析数据。
内容类型头主要负责如何解析来自客户端的数据,我已经给出了两种不同内容类型的示例,但还有更多。
nwo49xxi7#
只是想添加如何提取Go服务器中的Post参数,以防您正在处理JSON数据,这在构建API时是常见的情况...