Maison  >  Article  >  développement back-end  >  Est-ce que « http.DefaultClient.Do(req) » de GoLang réessaye automatiquement les requêtes HTTP en cas d'indisponibilité du serveur ?

Est-ce que « http.DefaultClient.Do(req) » de GoLang réessaye automatiquement les requêtes HTTP en cas d'indisponibilité du serveur ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-30 14:34:50900parcourir

Does GoLang's `http.DefaultClient.Do(req)` Automatically Retry HTTP Requests on Server Unavailability?

Mécanisme de nouvelle tentative de demande HTTP

Question :

Dans GoLang, lors de l'exécution de http.DefaultClient .Do(req), la tentative de requête HTTP sera-t-elle réessayée automatiquement si le serveur est temporairement indisponible ?

Réponse :

Non, le client HTTP GoLang n'implémente pas l'automatisation tentatives. Vous devez implémenter un mécanisme de nouvelle tentative personnalisé pour gérer l'indisponibilité du serveur.

Implémentation du modèle de nouvelle tentative :

Voici un exemple de modèle de nouvelle tentative de base que vous pouvez implémenter :

<code class="go">package main

import (
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
)

func main() {
    var (
        err      error
        response *http.Response
        retries  int = 3
    )

    for retries > 0 {
        response, err = http.Get("https://non-existent") // Replace with your server URL

        if err != nil {
            log.Println("Request failed", err)
            retries -= 1
        } else {
            break // Request succeeded, exit the retry loop
        }
    }

    if response != nil {
        defer response.Body.Close()
        data, err := ioutil.ReadAll(response.Body)
        if err != nil {
            log.Fatal(err)
        }
        fmt.Printf("Data received: %s", data)
    } else {
        log.Fatal("Unable to establish connection")
    }
}</code>

Dans cet exemple, la requête http.Get est exécutée en boucle, en essayant de récupérer les données du serveur. Si une requête échoue, la boucle décrémente le nombre de tentatives et continue jusqu'à ce que toutes les tentatives soient épuisées ou que la requête réussisse. Si la demande réussit, la réponse est imprimée. Si toutes les tentatives échouent, un message d'erreur est enregistré.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn