Eseguire richieste HTTP get in Go
Rispetto ad altri linguaggi Go ha un modo un pò tutto suo di eseguire richieste HTTP.
Non tanto nell'eseguire la richiesta vera a propria, ma quanto nel leggere la risposta.
Come potete vedere dalla documentazione, la funzione Get restituisce due valori:
- un puntatore Response
- un error
La prima è una struct che al suo interno ha Body che è d tipo io.ReadCloser.
Se andate a vedere, in sostanza dobbiamo usare la funzione Read a cui bassare un array di byte per avere la risposta "chiara".
Ma penso sia più facile vederlo che spiegarlo:
package main
import (
"fmt"
"net/http"
"os"
)
func main() {
resp, err := http.Get("https://www.google.com")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Println(resp.Body)
bs := make([]byte, 99999)
resp.Body.Read(bs)
fmt.Println(string(bs))
}
Il primo print restituirà dati inutilizzabili, mentre il secondo ci visualizzerà il codice della pagina.
Abbiamo anche un altro modo:
package main
import (
"fmt"
"io/ioutil"
"net/http"
"os"
)
func main() {
resp, err := http.Get("https://www.google.com")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
body, err2 := ioutil.ReadAll(resp.Body)
if err2 != nil {
fmt.Println(err2)
os.Exit(1)
}
sb := string(body)
fmt.Printf(sb)
}
Il risultato sarà lo stesso, solo che usiamo ReadAll.
Enjoy!
go http readcloser readall byte
Commentami!