今天整理了一下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