去测试网站状态(ping)
Posted
技术标签:
【中文标题】去测试网站状态(ping)【英文标题】:Go to test website status (ping) 【发布时间】:2014-12-21 10:46:46 【问题描述】:还有其他更好的方法来 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
这个函数太慢了,当我使用 goroutine 运行时,它超出了限制并给了我错误......
谢谢!
【问题讨论】:
【参考方案1】: 使用单一传输。由于传输维护了一个连接池,因此您不应随意创建和忽略传输。 按照net/http doc开头所述关闭响应正文。 如果您只对状态感兴趣,请使用 HEAD。 检查错误。代码:
var client = http.Client
Transport: &http.Transport
Dial: net.DialerTimeout: 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
【讨论】:
我觉得成功返回应该是return resp.StatusCode, nil
【参考方案2】:
由于这是 Google 上 Pinging in Go 的最高结果,只知道已经为此目的编写了几个包,但如果您打算使用此答案,我必须进行一些更改才能使其正常工作。
import (
"time"
"net/http"
)
var client = http.Client
Timeout: 2 * time.Second,
但在其他方面与接受的答案保持一致。
但我是 Go 的初学者,所以可能有更好的方法来做到这一点。
【讨论】:
以上是关于去测试网站状态(ping)的主要内容,如果未能解决你的问题,请参考以下文章