golang几种post请求方式
本文内容纲要:
-get请求
-post请求
-一种是使用http.Post方式
-一种是使用http.PostForm方法
-复杂的请求
get请求
get请求可以直接http.Get方法,非常简单。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
funchttpGet(){
resp,err:=http.Get("http://www.01happy.com/demo/accept.php?id=1")
iferr!=nil{
//handleerror
}
deferresp.Body.Close()
body,err:=ioutil.ReadAll(resp.Body)
iferr!=nil{
//handleerror
}
fmt.Println(string(body))
}
|
post请求
一种是使用http.Post方式
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
funchttpPost(){
resp,err:=http.Post("http://www.01happy.com/demo/accept.php",
"application/x-www-form-urlencoded",
strings.NewReader("name=cjb"))
iferr!=nil{
fmt.Println(err)
}
deferresp.Body.Close()
body,err:=ioutil.ReadAll(resp.Body)
iferr!=nil{
//handleerror
}
fmt.Println(string(body))
}
|
Tips:使用这个方法的话,第二个参数要设置成”application/x-www-form-urlencoded”,否则post参数无法传递。
一种是使用http.PostForm方法
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
funchttpPostForm(){
resp,err:=http.PostForm("http://www.01happy.com/demo/accept.php",
url.Values{"key":{"Value"}, "id":{"123"}})
iferr!=nil{
//handleerror
}
deferresp.Body.Close()
body,err:=ioutil.ReadAll(resp.Body)
iferr!=nil{
//handleerror
}
fmt.Println(string(body))
}
|
复杂的请求
有时需要在请求的时候设置头参数、cookie之类的数据,就可以使用http.Do方法。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
funchttpDo(){
client:=&http.Client{}
req,err:=http.NewRequest("POST", "http://www.01happy.com/demo/accept.php",strings.NewReader("name=cjb"))
iferr!=nil{
//handleerror
}
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
req.Header.Set("Cookie", "name=anny")
resp,err:=client.Do(req)
deferresp.Body.Close()
body,err:=ioutil.ReadAll(resp.Body)
iferr!=nil{
//handleerror
}
fmt.Println(string(body))
}
|
同上面的post请求,必须要设定Content-Type为application/x-www-form-urlencoded,post参数才可正常传递。
如果要发起head请求可以直接使用httpclient的head方法,比较简单,这里就不再说明。
用golang进行http请求类型多了,总结备忘一下。
1.普通的post\get请求
varrhttp.Request
r.ParseForm()
r.Form.Add("uuid",orderUUID)
bodystr:=strings.TrimSpace(r.Form.Encode())
request,err:=http.NewRequest("GET",url,strings.NewReader(bodystr))
iferr!=nil{
//TODO:
}
request.Header.Set("Content-Type","application/x-www-form-urlencoded")
request.Header.Set("Connection","Keep-Alive")
varresp*http.Response
resp,err=http.DefaultClient.Do(request)
iferr!=nil{
//TODO:
}
2.body全部二进制数据流进行post
//body提交二进制数据
funcDoBytesPost(urlstring,data[]byte)([]byte,error){
body:=bytes.NewReader(data)
request,err:=http.NewRequest(POST_METHOD,url,body)
iferr!=nil{
log.Println("http.NewRequest,[err=%s][url=%s]",err,url)
return[]byte(""),err
}
request.Header.Set("Connection","Keep-Alive")
varresp*http.Response
resp,err=http.DefaultClient.Do(request)
iferr!=nil{
log.Println("http.Dofailed,[err=%s][url=%s]",err,url)
return[]byte(""),err
}
deferresp.Body.Close()
b,err:=ioutil.ReadAll(resp.Body)
iferr!=nil{
log.Println("http.Dofailed,[err=%s][url=%s]",err,url)
}
returnb,err
}
3.模拟web表单文件上传进行post
funcnewfileUploadRequest(uristring,paramsmap[string]string,paramName,pathstring)(*http.Request,error){
file,err:=os.Open(path)
iferr!=nil{
returnnil,err
}
deferfile.Close()
body:=&bytes.Buffer{}
writer:=multipart.NewWriter(body)
part,err:=writer.CreateFormFile(paramName,path)
iferr!=nil{
returnnil,err
}
_,err=io.Copy(part,file)
forkey,val:=rangeparams{
_=writer.WriteField(key,val)
}
err=writer.Close()
iferr!=nil{
returnnil,err
}
request,err:=http.NewRequest("POST",uri,body)
request.Header.Set("Content-Type",writer.FormDataContentType())
returnrequest,err
}
本文内容总结:get请求,post请求,一种是使用http.Post方式,一种是使用http.PostForm方法,复杂的请求,
原文链接:https://www.cnblogs.com/mafeng/p/7068837.html