post_title - En el paquete http de Go, ¿cómo obtengo la cadena de consulta en una solicitud POST?
wordpress codex post content (5)
A continuación hay un ejemplo:
value := FormValue("field")
para más información. sobre el paquete http, puede visitar su documentación here . FormValue
básicamente devuelve valores POST o PUT, o valores GET, en ese orden, el primero que encuentra.
Estoy usando el paquete http
de Go para lidiar con la solicitud POST. ¿Cómo puedo acceder y analizar el contenido de la cadena de consulta desde el objeto Request
? No puedo encontrar la respuesta de la documentación oficial.
A continuación las palabras provienen del documento oficial.
El formulario contiene los datos del formulario analizado, incluidos los parámetros de consulta del campo URL y los datos del formulario POST o PUT . Este campo solo está disponible después de llamar a ParseForm.
Por lo tanto, los códigos de muestra como a continuación funcionarían.
func parseRequest(req *http.Request) error {
var err error
if err = req.ParseForm(); err != nil {
log.Error("Error parsing form: %s", err)
return err
}
_ = req.Form.Get("xxx")
return nil
}
Aquí hay un ejemplo simple y funcional:
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)
}
En caso de que sea útil para los seguidores, aquí hay un ejemplo más concreto de cómo acceder a los parámetros GET (básicamente, el objeto Request tiene un método que los analiza para usted llamado doc ):
Suponiendo una URL de solicitud como 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 param1s != nil {
// ... process them ... or you could just iterate over them without a nil check
// [if none were present, will be a nil array, which golang treats as an empty array]
// 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
}
}
También tenga en cuenta que "las claves en un mapa de valores [es decir, el valor de retorno Query ()] distinguen entre mayúsculas y minúsculas".
Una QueryString es, por definición , en la URL. Puede acceder a la URL de la solicitud utilizando req.URL
( doc ). El objeto URL tiene un método Query()
( doc ) que devuelve un tipo de Values
, que es simplemente una map[string][]string
de los parámetros QueryString.
Si lo que está buscando son los datos POST enviados por un formulario HTML , este es (normalmente) un par clave-valor en el cuerpo de la solicitud. Tiene razón en su respuesta de que puede llamar a ParseForm()
y luego usar el campo de campo req.Form
para obtener el mapa de pares clave-valor, pero también puede llamar a FormValue(key)
para obtener el valor de una clave específica. Esto llama a ParseForm()
si es necesario y obtiene valores independientemente de cómo se enviaron (es decir, en la cadena de consulta o en el cuerpo de la solicitud).