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

Http 检查是否可以使用Golang访问URL,http,go,httpwebrequest,Http,Go,Httpwebrequest,我想创建一个简单的脚本来检查某个hostname:port是否正在运行。如果URL是活动的,我只想得到一个bool响应,但我不确定是否有一个简单的方法来实现它。如果您只想查看URL是否可以访问,您可以使用它。像这样: timeout := 1 * time.Second conn, err := net.DialTimeout("tcp","mysyte:myport", timeout) if err != nil { log.Println("Site unreachable, er

我想创建一个简单的脚本来检查某个hostname:port是否正在运行。如果URL是活动的,我只想得到一个
bool
响应,但我不确定是否有一个简单的方法来实现它。

如果您只想查看URL是否可以访问,您可以使用它。像这样:

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

如果要检查Web服务器是否对某个URL应答,可以使用调用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")
奖金: Go通常不依赖异常,内置库通常不会死机,但会将错误作为第二个值返回。 看见
如果对本机函数的调用中断,您可以假设发生了非常糟糕的情况。

如果您不介意端口,请使用http.Get(web):

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 internet\n")
            os.Exit(1)
        }

        return false
    }

    if response.StatusCode == 200 {
        return true
    }

    return false
}

您可以提出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)
}

“但当URL关闭时,[http.Get]会生成紧急呼叫”。不,不是。你想知道是否有人在监听给定端口上的TCP连接,或者你想知道是否有web服务器正在那里运行,并将提供给定的URL?@Volker你说得对,对此表示抱歉。这是我第一次尝试围棋。我从我的问题中删除了那个细节。