之前用python写各种网络请求的时候写的非常顺手,但是当打算用golang写的时候才发现相对来说还是python的那种方式用的更加顺手,习惯golang的用法之后也就差别不大了,下面主要整理了常用的通过golang发起的GET请求以及POST请求的代码例子
golang发起GET请求
基本的GET请求
//基本的GET请求 package main import ( "fmt" "io/ioutil" "net/http" ) func main() { resp, err := http.Get("http://httpbin.org/get") if err != nil { fmt.Println(err) return } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) fmt.Println(string(body)) fmt.Println(resp.StatusCode) if resp.StatusCode == 200 { fmt.Println("ok") } }
带参数的Get请求
package main import ( "fmt" "io/ioutil" "net/http" ) func main(){ resp, err := http.Get("http://httpbin.org/get?name=zhaofan&age=23") if err != nil { fmt.Println(err) return } defer resp.Body.Close() body, _ := ioutil.ReadAll(resp.Body) fmt.Println(string(body)) }
但是如果我们想要把一些参数做成变量而不是直接放到url中怎么操作,代码例子如下:
package main import ( "fmt" "io/ioutil" "net/http" "net/url" ) func main(){ params := url.Values{} Url, err := url.Parse("http://httpbin.org/get") if err != nil { return } params.Set("name","zhaofan") params.Set("age","23") //如果参数中有中文参数,这个方法会进行URLEncode Url.RawQuery = params.Encode() urlPath := Url.String() fmt.Println(urlPath) // https://httpbin.org/get?age=23&name=zhaofan resp,err := http.Get(urlPath) defer resp.Body.Close() body, _ := ioutil.ReadAll(resp.Body) fmt.Println(string(body)) }
解析JSON类型的返回结果
package main import ( "encoding/json" "fmt" "io/ioutil" "net/http" ) type result struct { Args string `json:"args"` Headers map[string]string `json:"headers"` Origin string `json:"origin"` Url string `json:"url"` } func main() { resp, err := http.Get("http://httpbin.org/get") if err != nil { return } defer resp.Body.Close() body, _ := ioutil.ReadAll(resp.Body) fmt.Println(string(body)) var res result _ = json.Unmarshal(body,&res) fmt.Printf("%#v", res) }
GET请求添加请求头
package main import ( "fmt" "io/ioutil" "net/http" ) func main() { client := &http.Client{} req,_ := http.NewRequest("GET","http://httpbin.org/get",nil) req.Header.Add("name","zhaofan") req.Header.Add("age","3") resp,_ := client.Do(req) body, _ := ioutil.ReadAll(resp.Body) fmt.Printf(string(body)) }
从上述的结果可以看出我们设置的头是成功了:
{ "args": {}, "headers": { "Accept-Encoding": "gzip", "Age": "3", "Host": "httpbin.org", "Name": "zhaofan", "User-Agent": "Go-http-client/1.1" }, "origin": "211.138.20.170, 211.138.20.170", "url": "https://httpbin.org/get" }
golang 发起POST请求
基本的POST使用
package main
import (
"fmt"
"io/ioutil"