Maison  >  Article  >  développement back-end  >  Pourquoi `xml.NewDecoder()` génère-t-il une erreur EOF après avoir lu le corps de la réponse HTTP ?

Pourquoi `xml.NewDecoder()` génère-t-il une erreur EOF après avoir lu le corps de la réponse HTTP ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-02 03:09:02950parcourir

Why Does `xml.NewDecoder()` Throw an EOF Error After Reading the HTTP Response Body?

Erreur de décodage XML avec xml.NewDecoder() après la lecture du contenu du corps

Lors de la tentative de décodage XML à partir d'un corps de réponse HTTP, les développeurs peuvent rencontrez une erreur EOF (fin de fichier) avec xml.NewDecoder(). Cette erreur se produit généralement si le contenu du corps a déjà été lu ou traité.

L'exemple de code fourni comprend une section dans laquelle le corps de la réponse est lu pour la première fois à l'aide de ioutil.ReadAll(). Cette action consomme tout le contenu du corps, le rendant indisponible pour les opérations ultérieures. Par conséquent, lorsque xml.NewDecoder() est utilisé pour lire le corps, il atteint la fin du fichier et déclenche l'erreur EOF.

Pour éviter cette erreur, il est recommandé de mettre en cache le contenu du corps de la réponse dans un variable avant d’effectuer toute opération de lecture. Cela permet à d'autres fonctions, telles que xml.NewDecoder(), d'accéder au contenu sans déclencher l'erreur EOF.

Exemple de modification de code :

<code class="go">var bodyContent []byte

resp1, err := client.Do(req1)
error_handler(err)

defer resp1.Body.Close()
bodyContent, err = ioutil.ReadAll(resp1.Body)
error_handler(err)
resp1.Body = ioutil.NopCloser(bytes.NewBuffer(bodyContent))

if err := xml.NewDecoder(resp1.Body).Decode(&v); err != nil {
    fmt.Printf("error is : %v", err)
    return
}</code>

En introduisant la variable bodyContent et en mettant à jour le resp1.Body, le contenu peut être réutilisé pour les deux actions. Cette approche élimine l'erreur EOF et permet un décodage XML réussi.

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