En el capítulo anterior vimos que es posible procesar variables enviadas a través de la url, sin embargo existen algunas limitantes como.
- Existe un límite en el tamaño del string del envío.
- Las seguridad se ve comprometida ya que las variables están expuestas.
- No se pueden enviar datos como imágenes, o archivos de texto adjuntos.
Ejemplo del uso de ioutil.ReadAll() para leer una petición POST
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/" {
http.NotFound(w, r)
return
}
datosDelBody, err := ioutil.ReadAll(r.Body)
if err != nil {
log.Fatal(err)
}
fmt.Fprintf(w, "%s", datosDelBody)
})
http.ListenAndServe(":8000", nil)
}
A diferencia del ejemplo anterior, para procesar el contenido de una petición usamos el método ReadAll del paquete io/ioutil que procesa Body del http.Request.
datosDelBody, err := ioutil.ReadAll(r.Body)
Para enviar datos mediante post podemos usar curl.
$ curl http://localhost:8000/ -X POST -d "&name=Raul&lastname=Jimenez&"
Y obtendremos la respuesta.
&name=Raul&lastname=Jimenez&