检查是否可以使用Golang访问URL
问题描述:
我想创建一个简单的脚本来检查某个主机名:端口是否正在运行。我只想得到一个bool
响应,如果该URL是活的,但我不确定是否有一个简单的方法来做到这一点。检查是否可以使用Golang访问URL
答
如果您只想查看是否可以访问URL,则可以使用net.DialTimeout。就像这样:
timeout := time.Duration(1 * time.Second)
conn, err := net.DialTimeout("tcp","mysyte:myport", timeout)
if err != nil {
log.Println("Site unreachable, error: ", err)
}
答
如果你想检查是否在某个URL Web服务器的答案,你可以调用使用net/http HTTP GET请求。 如果服务器根本没有响应,您将会收到超时。您也可以检查回复状态。
resp, err := http.Get("http://google.com/")
if err != nil {
print(err.Error())
} else {
print(string(resp.StatusCode) + resp.Status)
}
您可以通过初始化http.Client更改默认超时。
timeout := time.Duration(1 * time.Second)
client := http.Client{
Timeout: timeout,
}
resp, err := client.Get("http://google.com")
奖金: 转到一般不依赖于异常和内置的库一般不要惊慌,而是返回一个错误作为第二值。 见Why does Go not have exceptions?。 如果您对本机函数的调用发生混乱,您可以认为发生了非常糟糕的事情。
“但是当URL关闭时,它[http.Get]产生一个恐慌呼叫”。不,它不。 – Volker
您想知道某个端口上是否正在侦听TCP连接,或者您想知道某个Web服务器是否在该服务器上运行,并且会提供给定的URL? – Flimzy
@Volker你说得对,对不起。这是我第一次去Go。我从我的问题中删除了这些细节。 – Sebastian