检查是否可以使用Golang访问URL

问题描述:

我想创建一个简单的脚本来检查某个主机名:端口是否正在运行。我只想得到一个bool响应,如果该URL是活的,但我不确定是否有一个简单的方法来做到这一点。检查是否可以使用Golang访问URL

+1

“但是当URL关闭时,它[http.Get]产生一个恐慌呼叫”。不,它不。 – Volker

+0

您想知道某个端口上是否正在侦听TCP连接,或者您想知道某个Web服务器是否在该服务器上运行,并且会提供给定的URL? – Flimzy

+0

@Volker你说得对,对不起。这是我第一次去Go。我从我的问题中删除了这些细节。 – Sebastian

如果您只想查看是否可以访问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?。 如果您对本机函数的调用发生混乱,您可以认为发生了非常糟糕的事情。