Код ответа HTTP в Go
Сервер возвращает не только тело, но и числовой
код состояния. Оно лежит в поле
StatusCode объекта ответа: по нему
видно, нашлась ли страница, принят ли запрос
или сервер отказал.
Успешная выдача часто помечена кодом двести. Коды четыреста и пятьсот говорят об ошибке на стороне клиента или сервера. Ошибку сети смотрят отдельно: код состояния появляется только когда ответ уже пришел.
Проверим код для учебного хоста:
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()
fmt.Println(resp.StatusCode)
_, err = io.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
}
На экране 200. Поле Status
содержит ту же цифру вместе с короткой
фразой, но для ветвления в коде обычно
достаточно числа из StatusCode.
Запросим несуществующий путь на том же хосте:
package main
import (
"fmt"
"log"
"net/http"
)
func main() {
resp, err := http.Get(
"https://example.com/missing-page",
)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
fmt.Println(resp.StatusCode)
}
Дан адрес:
https://example.com
Выведите код состояния ответа и закройте тело ответа отложенно.
Дан следующий код:
resp, err := http.Get("https://example.com")
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
if resp.StatusCode != 200 {
log.Fatal("bad status")
}
Скажите, при каком коде сработает проверка и программа завершится с сообщением.
Скажите, можно ли прочитать StatusCode,
если переменная err после запроса
не равна nil.