Go发起GET请求
基本的GET请求
//基本的GET请求
package mainimport ("fmt""io/ioutil""net/http"
)func main() {resp, err := http.Get("http://www.hao123.com")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 mainimport ("fmt""io/ioutil""net/http"
)func main(){resp, err := http.Get("http://www.baidu.com?name=Paul_Chan&age=26")if err != nil {fmt.Println(err)return}defer resp.Body.Close()body, _ := ioutil.ReadAll(resp.Body)fmt.Println(string(body))
}
如果我们想要把一些参数做成变量而不是直接放到url中怎么操作,代码例子如下:
package mainimport ("fmt""io/ioutil""net/http""net/url"
)func main(){params := url.Values{}Url, err := url.Parse("http://www.baidu.com")if err != nil {return}params.Set("name","Paul_Chan")params.Set("age","26")//如果参数中有中文参数,这个方法会进行URLEncodeUrl.RawQuery = params.Encode()urlPath := Url.String()fmt.Println(urlPath) // https://www.baidu.com?age=26&name=Paul_chanresp,err := http.Get(urlPath)defer resp.Body.Close()body, _ := ioutil.ReadAll(resp.Body)fmt.Println(string(body))
}
解析JSON类型的返回结果
package mainimport ("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://xxx.com")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 mainimport ("fmt""io/ioutil""net/http"
)func main() {client := &http.Client{}req,_ := http.NewRequest("GET","http://xxx.com",nil)req.Header.Add("name","Paul_Chan")req.Header.Add("age","26")resp,_ := client.Do(req)body, _ := ioutil.ReadAll(resp.Body)fmt.Printf(string(body))
}
从上述的结果可以看出我们设置的头是成功了:
{"args": {}, "headers": {"Accept-Encoding": "gzip", "Age": "26", "Host": "xxx.com", "Name": "Paul_Chan", "User-Agent": "Go-http-client/1.1"}, "origin": "211.138.20.170, 211.138.20.170", "url": "https://xxx.com"
}
golang 发起POST请求
基本的POST使用
package mainimport ("fmt""io/ioutil""net/http""net/url"
)func main() {urlValues := url.Values{}urlValues.Add("name","Paul_Chan")urlValues.Add("age","26")resp, _ := http.PostForm("http://xxx.com/post",urlValues)body, _ := ioutil.ReadAll(resp.Body)fmt.Println(string(body))
}
//结果如下:
/******************
{"args": {}, "data": "", "files": {}, "form": {"age": "26", "name": "Paul_Chan"}, "headers": {"Accept-Encoding": "gzip", "Content-Length": "19", "Content-Type": "application/x-www-form-urlencoded", "Host": "httpbin.org", "User-Agent": "Go-http-client/1.1"}, "json": null, "origin": "211.138.20.170, 211.138.20.170", "url": "https://httpbin.org/post"
}
******************/
另外一种方式
package mainimport ("fmt""io/ioutil""net/http""net/url""strings"
)func main() {urlValues := url.Values{"name":{"Paul_Chan"},"age":{"26"},}reqBody:= urlValues.Encode()resp, _ := http.Post("http://xxx.com/post", "text/html",strings.NewReader(reqBody))body,_:= ioutil.ReadAll(resp.Body)fmt.Println(string(body))
}
//结果如下:
/**************
{"args": {}, "data": "age=26&name=Paul_Chan", "files": {}, "form": {}, "headers": {"Accept-Encoding": "gzip", "Content-Length": "19", "Content-Type": "text/html", "Host": "httpbin.org", "User-Agent": "Go-http-client/1.1"}, "json": null, "origin": "211.138.20.170, 211.138.20.170", "url": "https://httpbin.org/post"
}
***************/
发送JSON数据的post请求
package mainimport ("bytes""encoding/json""fmt""io/ioutil""net/http"
)func main() {client := &http.Client{}data := make(map[string]interface{})data["name"] = "zhaofan"data["age"] = "23"bytesData, _ := json.Marshal(data)req, _ := http.NewRequest("POST","http://httpbin.org/post",bytes.NewReader(bytesData))resp, _ := client.Do(req)body, _ := ioutil.ReadAll(resp.Body)fmt.Println(string(body))
}
//结果如下:
/*************
{"args": {}, "data": "{\"age\":\"23\",\"name\":\"zhaofan\"}", "files": {}, "form": {}, "headers": {"Accept-Encoding": "gzip", "Content-Length": "29", "Host": "httpbin.org", "User-Agent": "Go-http-client/1.1"}, "json": {"age": "23", "name": "zhaofan"}, "origin": "211.138.20.170, 211.138.20.170", "url": "https://httpbin.org/post"
}
*************/
不用client的post请求
package mainimport ("bytes""encoding/json""fmt""io/ioutil""net/http"
)func main() {data := make(map[string]interface{})data["name"] = "zhaofan"data["age"] = "23"bytesData, _ := json.Marshal(data)resp, _ := http.Post("http://httpbin.org/post","application/json", bytes.NewReader(bytesData))body, _ := ioutil.ReadAll(resp.Body)fmt.Println(string(body))
}