今天整理了一下golang 中http请求的常用几种方式
1、get请求
(1)http.Get
func Get(url string) (resp *Response, err error) {
return DefaultClient.Get(url)
}
get请求可以直接使用http.Get(url)方法进行请求,非常简单
例:
func httpGet() {
resp, err := http.Get("https://open.ys7.com")
if err != nil {
// handle error
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body) //请求数据进行读取
if err != nil {
// handle error
}
fmt.Println(string(body))
}
(2)client.Get请求
client := &http.Client{}
client.Get(url)
2、post请求
(1)http.Post()
func Post(url string, bodyType string, body io.Reader) (resp *Response, err error) {
return DefaultClient.Post(url, bodyType, body)
}
参数说明:url--请求路径
bodyType--为http请求消息头中的Content-Type
body --为请求体内容
例:
func httpPost() {
resp, err := http.Post("https://open.ys7.com","application/x-www-form-urlencoded",strings.NewReader("name=abc"))
if err != nil {
fmt.Println(err)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
// handle error
}
fmt.Println(string(body))
}
(2)client.Post()
client := &http.Client{}
client.Post(url, bodyType, body)
(3)http.PostForm
func PostForm(url string, data url.Values) (resp *Response, err error) {
return DefaultClient.PostForm(url, data)
}
type Values map[string][]string //url中的Values
请求参数说明:url--请求路径
data--data中的keys和values可以作为request的body
例:
func httpPostForm(){
form := url.Values{}
form.Add("authorName", “Tom”)
form.Add("title", “golang”)
url=”https://open.ys7.com”
resp,err:=http.PostForm(url,form)
//do something
}
3、http.NewRequest 和 Client.Do
这种请求可以自定义请求的method(POST,GET,PUT,DELETE等),以及需要自定义request的header等比较复杂的请求
第一步通过NewRequest新建一个request
func NewRequest(method, urlStr string, body io.Reader) {}
req,err1:=http.NewRequest(method,url,body)
第二步可以自定义header
req.Header.Set(key, value string)
第三步发送http请求
resp,err2:=http.DefaultClient.Do(req)
或者使用 Client.Do请求
client := &http.Client{}
resp,err3:=client.Do(req)
第四步 处理获取到响应信息resp