Функция http.Head

Функция http.Head выполняет HTTP HEAD-запрос к указанному URL. В отличие от GET-запроса, HEAD возвращает только заголовки ответа без тела. Это полезно, когда нужно проверить доступность ресурса, получить размер файла или тип содержимого без загрузки всего тела. Первым параметром функция принимает строку с URL-адресом, вторым параметром - указатель на структуру http.Client (может быть nil, тогда используется клиент по умолчанию).

Синтаксис

gohttp.Head(url string) (*http.Response, error)

Пример

Давайте выполним HEAD-запрос к тестовому серверу и выведем полученные заголовки:

gopackage main

import (
  "fmt"
  "net/http"
)

func main() {
  res, err := http.Head("https://example.com")
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  fmt.Println("Status:", res.Status)
  fmt.Println("Content-Length:", res.ContentLength)
  fmt.Println("Content-Type:", res.Header.Get("Content-Type"))
}

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

go"Status: 200 OK"
"Content-Length: 1256"
"Content-Type: text/html; charset=UTF-8"

Пример

Проверим, существует ли файл на сервере, запросив только заголовки:

gopackage main

import (
  "fmt"
  "net/http"
)

func main() {
  res, err := http.Head("https://example.com/files/document.pdf")
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  defer res.Body.Close()

  if res.StatusCode == http.StatusOK {
    fmt.Println("File exists")
  } else {
    fmt.Println("File not found")
  }
}

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

go"File not found"

Пример

Используем HEAD-запрос с кастомным клиентом для проверки размера файла:

gopackage main

import (
  "fmt"
  "net/http"
  "time"
)

func main() {
  client := &http.Client{
    Timeout: 5 * time.Second,
  }

  res, err := client.Head("https://example.com/image.jpg")
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  if res.StatusCode == http.StatusOK {
    fmt.Printf("File size: %d bytes\n", res.ContentLength)
  }
}

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

go"File size: 2048576 bytes"

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

  • функцию http.Get,
    которая выполняет GET-запрос с получением тела ответа
  • функцию http.Post,
    которая выполняет POST-запрос с отправкой данных
  • функцию http.PostForm,
    которая выполняет POST-запрос с данными формы
  • функцию http.Client.Head,
    которая выполняет HEAD-запрос с кастомным клиентом