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

时间:2017-02-14 13:04:10

标签: http go httpwebrequest

我想创建一个简单的脚本来检查某个hostname:port是否正在运行。如果该网址已有效,我只想获得bool响应,但我不确定是否有直接的方法。

5 个答案:

答案 0 :(得分:12)

如果您只想查看是否可以访问网址,则可以使用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)
}

答案 1 :(得分:7)

如果要检查Web服务器是否在某个URL上应答,可以使用net/http调用HTTP GET请求。 如果服务器根本没有响应,您将收到超时。您还可以检查响应状态。

WITH 
MEMBER [Measures].[Sum] AS 
   SUM(
      EXCEPT(
         {[Created Time].[Hour].&[0]:[Created Time].[Hour].&[14]},
         {[In Progress Time].[Hour].&[0]:[In Progress Time].[Hour].&[14]}
      )
     ,[Measures].[Job Count]
   ) 
SELECT 
    [Measures].[Sum] ON 0 
FROM [Cube]

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

resp, err := http.Get("http://google.com/")
if err != nil {
    print(err.Error())
} else {
    print(string(resp.StatusCode) + resp.Status)
}

<强>加成: Go一般不依赖于异常,内置库通常不会出现恐慌,而是返回错误作为第二个值。 见Why does Go not have exceptions?。 如果你对本机函数的调用发生恐慌,你可以认为发生了一些非常糟糕的事情。

答案 2 :(得分:0)

https://github.com/030/go-utils

package main

import (
    "fmt"
    "github.com/030/go-utils"
)

func main() {
    fmt.Println(utils.URLExists("http://releasesoftwaremoreoften.com/"))
}

返回

true

答案 3 :(得分:0)

如果您不介意端口,请使用 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
}

答案 4 :(得分:0)

您可以发出 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