2017-02-14 69 views
0

我想創建一個簡單的腳本來檢查某個主機名:端口是否正在運行。我只想得到一個bool響應,如果該URL是活的,但我不確定是否有一個簡單的方法來做到這一點。檢查是否可以使用Golang訪問URL

+1

「但是當URL關閉時,它[http.Get]產生一個恐慌呼叫」。不,它不。 – Volker

+0

您想知道某個端口上是否正在偵聽TCP連接,或者您想知道某個Web服務器是否在該服務器上運行,並且會提供給定的URL? – Flimzy

+0

@Volker你說得對,對不起。這是我第一次去Go。我從我的問題中刪除了這些細節。 – Sebastian

回答

6

如果您只想查看是否可以訪問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) 
} 
3

如果你想檢查是否在某個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?。 如果您對本機函數的調用發生混亂,您可以認爲發生了非常糟糕的事情。

相關問題