Простой HTTP-запрос в Go
Самый короткий путь к странице по известному
адресу это команда получения из пакета
net/http. Она возвращает объект ответа
и ошибку: сбой может случиться еще до ответа
сервера, например при неверном адресе или
обрыве сети.
После проверки ошибки тело ответа закрывают
через defer, затем читают целиком
командой io.ReadAll из поля
Body. Полученные байты часто
превращают в строку для вывода или разбора.
Запросим главную страницу учебного хоста:
package main
import (
"fmt"
"io"
"log"
"net/http"
)
func main() {
resp, err := http.Get("https://example.com")
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Println(len(body))
}
На экране длина тела в байтах. Код состояния здесь не смотрим: для него есть отдельный урок, а сейчас важен сам прием чтения и закрытия.
Тот же прием для локального адреса, если сервис уже слушает порт:
package main
import (
"fmt"
"io"
"log"
"net/http"
)
func main() {
resp, err := http.Get("http://127.0.0.1:8080/ping")
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(body))
}
Дан адрес:
https://example.com
Напишите программу, которая выполнит запрос по этому адресу, закроет тело ответа отложенно и выведет длину прочитанных байт.
Дан следующий код:
resp, err := http.Get("https://example.com")
if err != nil {
log.Fatal(err)
}
body, err := io.ReadAll(resp.Body)
Скажите, какую строку добавить сразу после
успешного получения resp и зачем
она нужна.
Скажите, что вернет первое значение из пары результатов команды получения, если адрес содержит опечатку и хост не находится.