Golang发送HTTP、HTTPS请求
高能预警
- 本文略长,请大家根据目录选段食用~
- 本文源自于博主在编写获取 Kubernetes 集群组件的 /metrics 接口下的内容的程序时踩过的坑,所以 Demo 将结合 K8S 集群进行测试。当然也适用于发送一些常规的 HTTP 请求、带有证书的 HTTPS 请求和一些需要在 Header 中添加 token 的请求。目的是为了读者们能够“开箱即用”。请大家自行类推。
正文
1. 最简单的 HTTP 请求 —— Get 方法
使用场景
- 假设我们访问的目标是:http://10.10.102.91:10251/metrics,在浏览器中是这样的:
那么我们如何使用 Golang 代码拿到这个页面的数据呢?请君继续阅读:
代码
package xxxxxxxxxxxxxxxxxxxxxxxxxx
import (
"io/ioutil"
"net/http"
"time"
)
func GetHttp(url string) (body []byte, err error) {
// 创建 client 和 resp 对象
var client http.Client
var resp *http.Response
// 这里博主设置了10秒钟的超时
client = http.Client{
Timeout: 10 * time.Second}
// 这里使用了 Get 方法,并判断异常
resp, err = client.Get(url)
if err != nil {
return nil, err
}
// 释放对象
defer resp.Body.Close()
// 把获取到的页面作为返回值返回
body, err = ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err
}
// 释放对象
defer client.CloseIdleConnections()
return body, nil
}
解释说明
这段代码模拟了我们在浏览器中输入这个网址的过程,我们调用一下,看看是否拿到了我们想要的内容:
func TestGetHttp(t *testing.T) {
resp, err := GetHttp("http://10.10.102.91:10251/metrics")
if err != nil {
fmt.