2017-02-14 1 views
0

Je veux créer un script simple qui vérifie si un certain nom d'hôte: port est en cours d'exécution. Je veux seulement obtenir une réponse bool si cette URL est en direct, mais je ne suis pas sûr s'il y a une façon simple de le faire.Vérifiez si une URL est accessible en utilisant Golang

+1

"mais lorsque l'URL est en panne, [http.Get] génère un appel de panique". Non, ça ne l'est pas. – Volker

+0

Vous voulez savoir si quelque chose est à l'écoute des connexions TCP sur un port donné, ou si vous voulez savoir si un serveur web est en cours d'exécution, et servira une URL donnée? – Flimzy

+0

@Volker Vous avez raison, désolé à ce sujet. C'est la première fois que je vais à Go. J'ai enlevé ce détail de ma question. – Sebastian

Répondre

6

Si vous voulez seulement voir si une URL est joignable, vous pouvez utiliser net.DialTimeout. Comme ceci:

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

Si vous voulez vérifier si une réponse du serveur Web sur une certaine URL, vous pouvez invoquer une requête GET HTTP à l'aide net/http. Vous obtiendrez un délai d'expiration si le serveur ne répond pas du tout. Vous pouvez également vérifier l'état de la réponse.

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

Vous pouvez modifier le délai d'attente par défaut en initialisant un http.Client.

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

Bonus: Go ne repose généralement pas sur les exceptions et la construction dans les bibliothèques en général ne paniquez pas, mais revenir une erreur comme une deuxième valeur. Voir Why does Go not have exceptions?. Vous pouvez supposer que quelque chose de très mauvais est arrivé si votre appel à une fonction native panique.