Para tener control mas acanzado de las peticiones HTTP, podemos echar mano del cliente provisto por Go. Este se encuentra dentro del paquete net/http
, en el cual las configuraciones por default son aplicadas pero pueden sobreescribirse.
- Accedemos al cliente mediante
http.Client
.
client := &http.Client{}
- Creamos un nuevo request tipo POST mediante
http.NewRequest
request, err := http.NewRequest("POST", "https://httpbin.org/post", nil)
- Ahora ejecutamos el request mediante el client.
response, err := client.Do(request)
- Leemos el contenido de la respuesta, y cerramos body de dicha respuesta una ves que se cumplete la funcion main.
defer response.Body.Close()
body, err := ioutil.ReadAll(response.Body)
- Imprimimos el contenido del Body.
fmt.Printf("%s", body)
En forma conjunta el script luciría así.
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
request, err := http.NewRequest("POST", "https://httpbin.org/post", nil)
if err != nil {
log.Fatal(err)
}
response, err := client.Do(request)
if err != nil {
log.Fatal(err)
}
defer response.Body.Close()
body, err := ioutil.ReadAll(response.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s", body)
}
Si ejecutamos el programa, obtendríamos algo asi…
$ go run .../main.go
{
"args": {},
"data": "",
"files": {},
"form": {},
"headers": {
"Accept-Encoding": "gzip",
"Content-Length": "0",
"Host": "httpbin.org",
"User-Agent": "Go-http-client/1.1"
},
"json": null,
"origin": "..., ...",
"url": "https://httpbin.org/post"
}