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

Seb*_*ian 5 http httpwebrequest go

我想创建一个简单的脚本来检查某个hostname:port是否正在运行.我只想获得一个bool响应,如果该URL是实时的,但我不确定是否有一种直接的方式来做到这一点.

Tin*_*wor 14

如果您只想查看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)
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您只是检查主机是否可访问,请不要忘记“conn.Close()”或“defer conn.Close()”。 (2认同)

小智 8

如果要检查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)
}
Run Code Online (Sandbox Code Playgroud)

您可以通过初始化http.Client来更改默认超时.

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

奖励:Go通常不依赖于异常,内置库通常不会出现恐慌,但会返回错误作为第二个值.看看为什么Go没有例外?.如果您对本机函数的调用发生恐慌,您可以认为发生了非常糟糕的事情.


小智 7

您可以发出 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)
}
Run Code Online (Sandbox Code Playgroud)

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