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



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

如果你只想看看一个URL是否可访问,你可以使用net。拨号超时。喜欢这个:

timeout := 1 * time.Second
conn, err := net.DialTimeout("tcp","mysyte:myport", timeout)
if err != nil {
    log.Println("Site unreachable, error: ", err)
}

如果要检查 Web 服务器是否应答某个 URL,可以使用 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 来更改默认超时。客户。

timeout := time.Duration(1 * time.Second)
client := http.Client{
    Timeout: timeout,
}
resp, err := client.Get("http://google.com")

奖金:Go 通常不依赖于异常,内置库通常不会 panic,而是返回错误作为第二个值。请参阅为什么 Go 没有例外?。您可以假设,如果您对本机函数的调用出现恐慌,则发生了非常糟糕的事情。

您可以发出 HEAD 请求:

package main
import "net/http"
func head(s string) bool {
   r, e := http.Head(s)
   return e == nil && r.StatusCode == 200
}
func main() {
   b := head("https://stackoverflow.com")
   println(b)
}

https://golang.org/pkg/net/http#Head

如果您不介意端口,请使用 http。获取(网络(

package main
import (
    "fmt"
    "net/http"
    "os"
)
func main() {
    web := os.Args[1]
    fmt.Println(webIsReachable(web))
}
func webIsReachable(web string) bool {
    response, errors := http.Get(web)
    if errors != nil {
        _, netErrors := http.Get("https://www.google.com")
        if netErrors != nil {
            fmt.Fprintf(os.Stderr, "no internetn")
            os.Exit(1)
        }
        return false
    }
    if response.StatusCode == 200 {
        return true
    }
    return false
}

相关内容

  • 没有找到相关文章

最新更新