Clientes HTTP, Uso del http.Client

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