c语言编程笔录

首页 >   > 笔记大全

笔记大全

golang 实现curl

更新时间:2023-10-05

前言

curl 是一个非常流行的命令行工具,可以用来向服务器发送请求。在golang中可以通过net/http包和http.NewRequest方法来实现一个基本的curl。

实现GET请求

首先我们需要定义一个http客户端,可以通过 http.Client 类型的对象实现。http.Client 中的 Get 方法可以用来发送GET请求,如下所示:

      resp, err :=http.Get("https://httpbin.org/get")
      if err !=nil {
        log.Fatalln(err)
      }
      defer resp.Body.Close()
      body, err :=ioutil.ReadAll(resp.Body)
      if err !=nil {
        log.Fatalln(err)
      }
      fmt.Println(string(body))
    

以上代码通过 http.Get 方法向 https://httpbin.org 发送了一个GET请求,并将响应内容输出到了控制台。

实现POST请求

实现 POST 请求,需要设置请求体数据。通过http.NewRequest方法可以创建一个http.Request对象,我们可以设置请求方法,请求头和请求体等信息。

      jsonData :=`{"name": "golang", "age": 10}`
      req, err :=http.NewRequest("POST", "https://httpbin.org/post", bytes.NewBuffer([]byte(jsonData)))
      req.Header.Set("Content-Type", "application/json")

      client :=&http.Client{}
      resp, err :=client.Do(req)
      if err !=nil {
        panic(err)
      }
      defer resp.Body.Close()

      body, err :=ioutil.ReadAll(resp.Body)
      if err !=nil {
        log.Fatalln(err)
      }
      fmt.Println(string(body))
    

以上代码里,我们通过bytes.NewBuffer方法将json格式的数据转换成字节数组,并设置请求头的Content-Type值为 application/json。最后,使用 http.Client 类型的对象的 Do 方法,发送请求并接收响应。

自定义请求头和查询参数

发送HTTP请求时,往往需要设置自定义请求头和查询参数。在golang中,可以通过http.NewRequest方法的第三个参数来设置查询参数。

      values :=url.Values{}
      values.Set("name", "golang")
      values.Set("age", strconv.Itoa(10))

      req, err :=http.NewRequest("GET", "https://httpbin.org/get?"+values.Encode(), nil)
      req.Header.Set("Referer", "https://www.baidu.com/")

      client :=&http.Client{}
      resp, err :=client.Do(req)
      if err !=nil {
        panic(err)
      }
      defer resp.Body.Close()

      body, err :=ioutil.ReadAll(resp.Body)
      if err !=nil {
        log.Fatalln(err)
      }
      fmt.Println(string(body))
    

以上代码里,我们通过 url.Values 类型创建了查询参数,并使用 Encode 方法将其转换为URL编码的格式,并将其拼接到了请求URL中。同时,设置了请求头中的Referer属性。

总结

以上就是使用golang实现curl的基本方法,我们使用http包提供的http.Client类型来发送HTTP请求。同时还可以通过http.NewRequest方法自定义请求头和查询参数。