文章目录
  1. 1. 方法
  2. 2. http.Client{}.PostForm
  3. 3. http.PostForm
  4. 4. 对表单数据的提取

golang这边将map结构序列化通常采用json.Marshaljson.Unmarshal来做,但是在php server端还需要做json反序列化解析才能用, 用golang模拟表单提交, php server端则非常方便提取相应的数据字段.

方法

方法是利用golangnet/http包提供的PostForm提交post表单提交。ParseForm解析URL中的查询字符串,并将解析结果更新到r.Form字段。对于POSTPUT请求,ParseForm还会将body当作表单解析,并将结果既更新到r.PostForm也更新到r.Form。解析结果中,POSTPUT请求主体要优先于URL查询字符串(同名变量,主体的值在查询字符串的值前面)。如果请求的主体的大小没有被MaxBytesReader函数设定限制,其大小默认限制为开头10MB。

http.Client{}.PostForm

利用http.Client{}.PostForm提交post表单。

1
2
3
4
5
6
import "net/http"
client := &http.Client{}
res, err := client.PostForm("http://127.0.0.1:8091/postpage", url.Values{
"key": {"this is client key"},
"value": {"this is client value"},
})

http.PostForm

直接用http.PostForm提交post表单。

1
2
3
4
5
6
7
8
9
10
import "net/http"
//data := make(url.Values)
//data["key"] = []string{"this is key"}
//data["value"] = []string{"this is value"}

//把post表单发送给目标服务器
res, err := http.PostForm("http://127.0.0.1:8091/postpage", url.Values{
"key": {"this is url key"},
"value": {"this is url value"},
})

对表单数据的提取

server端对表单数据的提取

1
2
3
4
5
6
//接受post请求, 然后打印表单中key和value字段的值
if r.Method == "POST" {
var (
key string = r.PostFormValue("key")
value string = r.PostFormValue("value")
)

github示例代码

作者署名:朴实的一线攻城狮
本文标题:Golang发送post表单请求
本文出处:http://researchlab.github.io/2016/09/07/go-postform/
版权声明:本文由Lee Hong创作和发表,采用署名(BY)-非商业性使用(NC)-相同方式共享(SA)国际许可协议进行许可,转载请注明作者及出处, 否则保留追究法律责任的权利。

@一线攻城狮

关注微信公众号 @一线攻城狮

总访问:
总访客: