Réessayer les requêtes HTTP ayant échoué dans Go
Lorsque vous essayez de transmettre des données à un serveur Apache à l'aide de GoLang et que vous rencontrez une erreur, il est crucial de prendre en compte si la requête HTTP sera automatiquement réessayée. La réponse à cette question est négative, ce qui signifie que vous devez implémenter un mécanisme de nouvelle tentative personnalisé.
Dans le code fourni, vous utilisez la méthode http.DefaultClient.Do pour exécuter la requête. Cette méthode ne gère pas automatiquement les tentatives en cas d'indisponibilité du serveur ou d'autres erreurs. Pour intégrer une logique de nouvelle tentative, vous pouvez adopter une approche personnalisée, comme démontré dans l'exemple suivant :
<code class="go">package main import ( "fmt" "io/ioutil" "log" "net/http" "time" ) func main() { var ( err error response *http.Response retries int = 3 ) for retries > 0 { response, err = http.Get("https://non-existent") // Change the URL to "https://google.com/robots.txt" for testing if err != nil { log.Println(err) time.Sleep(2 * time.Second) // Introduce a delay between retries retries -= 1 continue } else { break } } if response != nil { defer response.Body.Close() data, err := ioutil.ReadAll(response.Body) if err != nil { log.Fatal(err) } fmt.Printf("data = %s\n", data) } }</code>
Dans cet exemple, la fonction time.Sleep a été utilisée pour introduire un délai entre les tentatives. Vous pouvez ajuster le délai en fonction des exigences spécifiques de votre application. N'oubliez pas de gérer toutes les exceptions ou erreurs pouvant survenir lors du processus de nouvelle tentative, garantissant ainsi la stabilité et la fiabilité de votre transfert de données.
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!