Maison > développement back-end > Golang > Golang lit le corps de la requête

Golang lit le corps de la requête

PHPz
Libérer: 2023-05-15 10:48:09
original
2265 Les gens l'ont consulté

Lorsque vous utilisez Golang pour le développement Web, vous devez parfois lire la partie du corps de la requête HTTP (telle que les données de soumission contenues dans la requête POST) pour le traitement. Cet article présentera comment Golang lit le corps d'une requête HTTP.

1. Utilisez ioutil.ReadAll() pour lire

Le package ioutil de la bibliothèque standard Golang fournit une fonction ReadAll() qui peut lire n'importe quel type io.Reader Toutes les données dans l'objet et renvoie des données de type []byte. Par conséquent, nous pouvons lire la partie corps de la requête HTTP en passant le champ http.Request.Body en paramètre à la fonction ReadAll(). L'exemple de code est le suivant :

package main

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

func handler(w http.ResponseWriter, r *http.Request) {
    body, err := ioutil.ReadAll(r.Body)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }
    defer r.Body.Close()

    // 处理body数据
    fmt.Fprint(w, string(body))
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}
Copier après la connexion

Dans l'exemple de code ci-dessus, nous définissons une fonction de traitement de requête HTTP handler(), dans laquelle la partie du corps de la requête HTTP est lue et convertie en chaîne. Le type est affiché dans la réponse HTTP.

Il est à noter que lors de l'utilisation de la fonction ioutil.ReadAll() pour lire le corps d'une requête HTTP, le champ http.Request.Body doit être fermé après le retour de la fonction pour libérer des ressources. L'instruction defer est utilisée ici pour garantir que le champ est fermé après l'exécution de la fonction.

2. Utilisez json.Decoder pour lire les données JSON

Si la partie du corps de la requête HTTP est constituée de données au format JSON, nous pouvons utiliser le type json.Decoder dans Golang pour lire directement les données JSON et les analyser dans la structure de données Golang. L'exemple de code est le suivant :

package main

import (
    "encoding/json"
    "fmt"
    "net/http"
)

type User struct {
    Username string `json:"username"`
    Password string `json:"password"`
}

func handler(w http.ResponseWriter, r *http.Request) {
    var user User
    err := json.NewDecoder(r.Body).Decode(&user)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }
    defer r.Body.Close()

    // 处理user对象
    fmt.Fprintf(w, "Username: %s, Password: %s", user.Username, user.Password)
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}
Copier après la connexion

Dans l'exemple de code ci-dessus, nous définissons un type de structure nommé User et créons un json à l'aide de la fonction json.NewDecoder() dans la fonction de traitement des requêtes HTTP de type Decoder. objet, puis utilisez sa méthode Decode() pour analyser directement la partie du corps de la requête HTTP en données de type utilisateur et la traiter.

Il est à noter que lors de l'utilisation de json.Decoder pour lire le corps d'une requête HTTP, le champ http.Request.Body doit être fermé avant que la fonction ne revienne pour libérer des ressources. De plus, vous devez transmettre un pointeur vers le type de structure cible en tant que paramètre de la méthode Decode() (par exemple, &user) afin que les données JSON analysées puissent être renseignées dans l'objet de structure.

3. Utilisez xml.Decoder pour lire les données XML

Si la partie du corps de la requête HTTP est constituée de données au format XML, nous pouvons de la même manière utiliser le type xml.Decoder dans Golang Pour lire directement les données XML et les analyser dans la structure de données Golang. L'exemple de code est le suivant :

package main

import (
    "encoding/xml"
    "fmt"
    "net/http"
)

type User struct {
    XMLName  xml.Name `xml:"user"`
    Username string   `xml:"username"`
    Password string   `xml:"password"`
}

func handler(w http.ResponseWriter, r *http.Request) {
    var user User
    err := xml.NewDecoder(r.Body).Decode(&user)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }
    defer r.Body.Close()

    // 处理user对象
    fmt.Fprintf(w, "Username: %s, Password: %s", user.Username, user.Password)
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}
Copier après la connexion

Dans l'exemple de code ci-dessus, nous définissons un type de structure nommé User et créons un fichier XML à l'aide de la fonction xml.NewDecoder() dans la fonction de traitement des requêtes HTTP de type Decoder. objet, puis utilisez sa méthode Decode() pour analyser directement la partie du corps de la requête HTTP en données de type utilisateur et la traiter.

Il est à noter que lors de l'utilisation de xml.Decoder pour lire le corps d'une requête HTTP, le champ http.Request.Body doit être fermé avant que la fonction ne revienne pour libérer des ressources. De plus, vous devez spécifier le nom du nœud XML correspondant pour chaque champ du type de structure cible (par exemple, le nœud XML correspondant au champ Nom d'utilisateur est nom d'utilisateur).

Summary

Cet article présente comment Golang lit le corps d'une requête HTTP. En utilisant le package ioutil, le type json.Decoder et le type xml.Decoder dans la bibliothèque standard, nous pouvons facilement lire et analyser la partie du corps de la requête HTTP dans la structure de données de Golang pour le traitement.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal