Тип 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,
который используется для формирования ответа на сервере