165 votes

Dans le paquet http de Go, comment puis-je obtenir la chaîne de requête d'une demande POST ?

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.

189voto

rogerdpack Points 12806

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=&param2= param1 will also be "" :|
  }

  // if multiples possible, or to process empty values like param1 in
  // ?param1=&param2=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".

180voto

PuerkitoBio Points 4721

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).

21voto

msoliman Points 732

Voici un exemple :

value := r.FormValue("field")

Pour plus d'informations sur le paquet http, vous pouvez consulter sa documentation. aquí . FormValue renvoie essentiellement les valeurs POST ou PUT, ou GET, dans cet ordre, la première qu'il trouve.

10voto

user27111987 Points 661

Il existe deux façons d'obtenir les paramètres de la requête :

  1. Utilisation de reqeust.URL.Query()
  2. 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

9voto

l3x Points 434

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)
}

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X