Skip to content

Go 获取 HTTP 请求的状态码

Published: at 09:40 AMSuggest Changes

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

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

改了一下,代码如下

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

Previous Post
CSS 属性选择器及 Vue scoped 样式穿透
Next Post
FFmpeg 视频剪辑命令及 HTML 生成器