РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1031 of 1593 menu

Тип http.Response

Тип http.Response представляет собой HTTP-ответ, полученный от сервера. Он содержит информацию о статусе ответа, заголовки и тело ответа. Основные поля структуры: StatusCode - код состояния HTTP (например, 200, 404), Header - заголовки ответа, Body - тело ответа (поток для чтения), ContentLength - длина содержимого. Тело ответа Body должно быть закрыто после чтения с помощью Close, чтобы избежать утечек ресурсов.

Структура http.Response

type Response struct { Status string StatusCode int Header Header Body io.ReadCloser ContentLength int64 // другие поля }

Поле StatusCode содержит числовой код ответа, Status - текстовое описание статуса, Header - карта заголовков, Body - поток для чтения данных ответа, ContentLength - размер тела в байтах.

Пример чтения HTTP-ответа

Давайте выполним GET-запрос и прочитаем ответ от сервера:

package main import ( "fmt" "io" "net/http" ) func main() { res, err := http.Get("https://httpbin.org/get") if err != nil { fmt.Println("Error:", err) return } defer res.Body.Close() body, err := io.ReadAll(res.Body) if err != nil { fmt.Println("Error reading body:", err) return } fmt.Println("Status:", res.Status) fmt.Println("StatusCode:", res.StatusCode) fmt.Println("ContentLength:", res.ContentLength) fmt.Println("Body:", string(body)) }

Результат выполнения кода:

"Status: 200 OK" "StatusCode: 200" "ContentLength: 256" "Body: { ... }"

В этом примере мы выполняем GET-запрос, читаем тело ответа и выводим информацию о статусе и содержимом. Обратите внимание на использование defer res.Body.Close() для закрытия тела после завершения функции.

Пример проверки статуса ответа

Давайте проверим статус ответа и обработаем ошибки:

package main import ( "fmt" "net/http" ) func main() { res, err := http.Get("https://httpbin.org/status/404") if err != nil { fmt.Println("Error:", err) return } defer res.Body.Close() if res.StatusCode == http.StatusOK { fmt.Println("Request successful") } else { fmt.Printf("Request failed with status: %d %s\n", res.StatusCode, res.Status) } }

Результат выполнения кода:

"Request failed with status: 404 Not Found"

Здесь мы выполняем запрос к недоступному URL и проверяем статус ответа. Используем константу http.StatusOK для сравнения с кодом 200.

Пример чтения заголовков ответа

Давайте прочитаем заголовки HTTP-ответа:

package main import ( "fmt" "net/http" ) func main() { res, err := http.Get("https://httpbin.org/get") if err != nil { fmt.Println("Error:", err) return } defer res.Body.Close() fmt.Println("Content-Type:", res.Header.Get("Content-Type")) fmt.Println("Server:", res.Header.Get("Server")) for key, values := range res.Header { fmt.Printf("%s: %v\n", key, values) } }

Результат выполнения кода:

"Content-Type: application/json" "Server: gunicorn/19.9.0" "Access-Control-Allow-Origin: *" "Connection: keep-alive"

В этом примере мы используем метод Header.Get для получения конкретных заголовков и перебираем все заголовки с помощью цикла for.

Смотрите также

  • тип http.Request,
    который представляет HTTP-запрос на сервер
  • метод Client.Do,
    который выполняет HTTP-запрос и возвращает ответ
  • метод http.Get,
    который выполняет GET-запрос и возвращает ответ
  • тип http.ResponseWriter,
    который используется для формирования ответа на сервере
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить