簡體   English   中英

轉到測試網站狀態(ping)

[英]Go to test website status (ping)

有沒有其他更好的方法來 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
}

這個函數太慢了,當我用 goroutines 運行時,它超出了限制並給了我錯誤......

謝謝!

  • 使用單程運輸。 因為傳輸維護着一個連接池,所以您不應輕易創建或忽略傳輸。
  • 按照net / http doc開頭所述關閉響應正文。
  • 如果僅對狀態感興趣,請使用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
}

由於這是谷歌在 Go 中 Pinging 的最高結果,只知道有幾個包是為此目的編寫的,但是如果你打算使用這個答案,我必須做一些改變才能讓它工作。

import (
   "time"
   "net/http"
)

var client = http.Client{
   Timeout: 2 * time.Second,
}

但在其他方面與接受的答案保持一致。

但我是 Go 的初學者,所以可能有更好的方法來做到這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM