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方法自定义请求头和查询参数。