Maison >développement back-end >Golang >Pourquoi les requêtes HTTP Golang successives entraînent-elles des erreurs EOF inattendues ?

Pourquoi les requêtes HTTP Golang successives entraînent-elles des erreurs EOF inattendues ?

DDD
DDDoriginal
2024-12-15 22:15:13575parcourir

Why Do Successive Golang HTTP Requests Result in Unexpected EOF Errors?

Erreurs EOF inattendues dans les requêtes HTTP Golang lors d'appels successifs

Dans le but de résoudre les erreurs inhabituelles rencontrées lors de l'utilisation du package net/http standard , un utilisateur a signalé des exceptions EOF (End of File) intermittentes lors de plusieurs requêtes HTTP successives.

L'extrait de code fourni par l'utilisateur inclut des fonctions de test pour les requêtes GET et PUT, où des erreurs se produisaient sporadiquement lors de l'exécution.

Dépannage du problème

Après avoir analysé le code, il a été découvert que le la cause sous-jacente était liée à un traitement inapproprié des demandes. Plus précisément, le champ Req.Close n'était pas explicitement défini sur true.

Dans le code fourni, la syntaxe defer resp.Body.Close() a été utilisée pour gérer la fermeture du corps de la réponse. Cependant, cela s'est avéré insuffisant et définir Req.Close sur true était nécessaire pour garantir un traitement correct des requêtes.

Code mis à jour

L'extrait de code suivant montre comment définir correctement Req.Close :

client := &http.Client{}
req, err := http.NewRequest(method, url, httpBody)

// **NOTE** this !!
req.Close = true

req.Header.Set("Content-Type", "application/json")
req.SetBasicAuth("user", "pass")
resp, err := client.Do(req)
if err != nil {
    // whatever
}
defer resp.Body.Close()

response, err = ioutil.ReadAll(resp.Body)
if err != nil {
    // Whatever
}

Résolution

Le réglage de Req.Close sur true garantit efficacement que la requête HTTP se ferme correctement, empêchant ainsi l'erreur EOF de se produire. En implémentant ce changement, les fonctions de test de l'utilisateur ont systématiquement réussi lors de plusieurs demandes, résolvant ainsi le problème.

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