0%

Go 获取 Http 请求的状态码

Go 语言教程我看了个大概,想写一个监控网站的小程序,代码如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package main

import (
"fmt"
"github.com/go-resty/resty/v2"
)

func main() {
// Create a Resty Client
client := resty.New()

resp, err := client.R().
EnableTrace().
Get("https://www.baidu.com")

// Explore response object
fmt.Println("Response Info:")
fmt.Println(" Error :", err)
fmt.Println(" Status Code:", resp.StatusCode())
fmt.Println(" Status :", resp.Status())
fmt.Println(" Proto :", resp.Proto())
fmt.Println(" Time :", resp.Time())
fmt.Println(" Received At:", resp.ReceivedAt())
fmt.Println(" Body :\n", resp)
fmt.Println()

// Explore trace info
fmt.Println("Request Trace Info:")
ti := resp.Request.TraceInfo()
fmt.Println(" DNSLookup :", ti.DNSLookup)
fmt.Println(" ConnTime :", ti.ConnTime)
fmt.Println(" TCPConnTime :", ti.TCPConnTime)
fmt.Println(" TLSHandshake :", ti.TLSHandshake)
fmt.Println(" ServerTime :", ti.ServerTime)
fmt.Println(" ResponseTime :", ti.ResponseTime)
fmt.Println(" TotalTime :", ti.TotalTime)
fmt.Println(" IsConnReused :", ti.IsConnReused)
fmt.Println(" IsConnWasIdle :", ti.IsConnWasIdle)
fmt.Println(" ConnIdleTime :", ti.ConnIdleTime)
fmt.Println(" RequestAttempt:", ti.RequestAttempt)
fmt.Println(" RemoteAddr :", ti.RemoteAddr.String())
}

但是我发现,去请求大文件的时候,程序响应很慢,而我只需要返回成功的状态码就行了。

研究了一下,发现可以设置 HeaderRange"bytes=0-1023",限制请求数据大小。因为我只关心状态码而不关心 body 内容

MDN - https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Range

改了一下,代码如下

1
2
3
4
resp, err := client.R().
EnableTrace().
SetHeader("Range", "bytes=0-1023").
Get("https://www.baidu.com")