转到测试网站状态 (ping)

1 http ping go

还有其他更好的方法来 ping 网站并检查网站是否可用吗?

我只需要获取状态代码而不是获取(下载)所有网站...

func Ping(domain string) int {
    timeout := time.Duration(2 * time.Second)
    dialTimeout := func(network, addr string) (net.Conn, error) {
        return net.DialTimeout(network, addr, timeout)
    }
    transport := http.Transport{
        Dial: dialTimeout,
    }
    client := http.Client{
        Transport: &transport,
    }
    url := "http://" + domain
    req, _ := http.NewRequest("GET", url, nil)
    resp, _ := client.Do(req)
    return resp.StatusCode
}
Run Code Online (Sandbox Code Playgroud)

这个函数太慢了,当我使用 goroutine 运行时,它超出了限制并给出了错误......

谢谢!

小智 5

  • 使用单一传输。由于传输维护着一个连接池,因此您不应该随意创建和忽略传输。
  • 按照net/http 文档开头所述关闭响应正文。
  • 如果您只对状态感兴趣,请使用 HEAD。
  • 检查错误。

代码:

var client = http.Client{
  Transport: &http.Transport{
    Dial: net.Dialer{Timeout: 2 * time.Second}.Dial,
  },
}

func Ping(domain string) (int, error) {
    url := "http://" + domain
    req, err := http.NewRequest("HEAD", url, nil)
    if err != nil {
       return 0, err
    }
    resp, err := client.Do(req)
    if err != nil {
       return 0, err
    }
    resp.Body.Close()
    return resp.StatusCode, nil
}
Run Code Online (Sandbox Code Playgroud)