¿Cómo crear un cliente que haga una petición POST en Go?
Para el siguiente ejemplo vamos a utilizar el servicio httpbin.org, el cual permite realizar peticiones y analizar la respuesta de estas.
Primero realizamos la composición de los datos.
datos := strings.NewReader(`{"nombre":"Luis"}`)
Ahora realizamos el envío de los datos mediante http.Post
. Esto nos retornara dos posibles valores, la respuesta y el error.
res, err := http.Post("https://httpbin.org/post", "application/json", datos)
Cerramos la lectura del body al completar el programa.
defer res.Body.Close()
Realizamos la lectura del body.
body, err := ioutil.ReadAll(res.Body)
Si no hay inconvenientes imprimimos el cuerpo.
fmt.Printf("%s", body)
De forma conjunta, el programa luciría así.
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
datos := strings.NewReader(`{"nombre":"Luis"}`)
res, err := http.Post("https://httpbin.org/post", "application/json", datos)
if err != nil {
log.Fatal(err)
}
defer res.Body.Close()
body, err := ioutil.ReadAll(res.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s", body)
}
Si realizamos la ejecución del programa. El contenido de la respuesta es la siguiente.
$ go run .../main.go
{
"args": {},
"data": "{\"nombre\":\"Luis\"}",
"files": {},
"form": {},
"headers": {
"Accept-Encoding": "gzip",
"Content-Length": "17",
"Content-Type": "application/json",
"Host": "httpbin.org",
"User-Agent": "Go-http-client/1.1"
},
"json": {
"nombre": "Luis"
},
"origin": "..., ...",
"url": "https://httpbin.org/post"
}