J'utilise le http
de Go pour traiter les requêtes POST. Comment puis-je accéder au contenu de la chaîne de requête et l'analyser à partir de l'interface de l'utilisateur ? Request
objet ? Je ne trouve pas la réponse dans la documentation officielle.
Réponses
Trop de publicités?Voici un exemple plus concret de la manière d'accéder aux paramètres GET. Le site Request
a une méthode qui les analyse pour vous, appelée Requête :
En supposant qu'une URL de demande comme http://host:port/something?param1=b
func newHandler(w http.ResponseWriter, r *http.Request) {
fmt.Println("GET params were:", r.URL.Query())
// if only one expected
param1 := r.URL.Query().Get("param1")
if param1 != "" {
// ... process it, will be the first (only) if multiple were given
// note: if they pass in like ?param1=¶m2= param1 will also be "" :|
}
// if multiples possible, or to process empty values like param1 in
// ?param1=¶m2=something
param1s := r.URL.Query()["param1"]
if len(param1s) > 0 {
// ... process them ... or you could just iterate over them without a check
// this way you can also tell if they passed in the parameter as the empty string
// it will be an element of the array that is the empty string
}
}
Notez également que "les clés d'une carte de valeurs [c'est-à-dire la valeur de retour de Query()] sont sensibles à la casse".
Une QueryString est, par définition dans l'URL. Vous pouvez accéder à l'URL de la demande en utilisant req.URL
( doc ). L'objet URL a un Query()
méthode ( doc ) qui renvoie un Values
qui est simplement un map[string][]string
des paramètres QueryString.
Si ce que vous recherchez sont les données POST tel que soumis par un formulaire HTML alors il s'agit (généralement) d'une paire clé-valeur dans le corps de la demande. Vous avez raison dans votre réponse de dire que vous pouvez appeler ParseForm()
et ensuite utiliser req.Form
pour obtenir la carte des paires clé-valeur, mais vous pouvez également appeler le champ FormValue(key)
pour obtenir la valeur d'une clé spécifique. Ceci appelle ParseForm()
si nécessaire, et obtient les valeurs indépendamment de la manière dont elles ont été envoyées (c'est-à-dire dans la chaîne de requête ou dans le corps de la requête).
Il existe deux façons d'obtenir les paramètres de la requête :
- Utilisation de reqeust.URL.Query()
- Utilisation de request.Form
Dans le second cas, il faut faire attention car les paramètres du corps de l'article seront prioritaires par rapport aux paramètres de la requête. Une description complète de l'obtention des paramètres de la requête peut être trouvée ici.
https://golangbyexample.com/net-http-package-get-query-params-golang
Voici un exemple simple et fonctionnel :
package main
import (
"io"
"net/http"
)
func queryParamDisplayHandler(res http.ResponseWriter, req *http.Request) {
io.WriteString(res, "name: "+req.FormValue("name"))
io.WriteString(res, "\nphone: "+req.FormValue("phone"))
}
func main() {
http.HandleFunc("/example", func(res http.ResponseWriter, req *http.Request) {
queryParamDisplayHandler(res, req)
})
println("Enter this in your browser: http://localhost:8080/example?name=jenny&phone=867-5309")
http.ListenAndServe(":8080", nil)
}
- Réponses précédentes
- Plus de réponses