Метод http.Client.Head

Метод http.Client.Head выполняет HTTP HEAD-запрос к указанному URL. Он отправляет запрос без тела и получает только заголовки ответа. Первым параметром метод принимает строку с URL-адресом. Метод возвращает указатель на http.Response и ошибку, если она возникла. HEAD-запросы полезны для проверки доступности ресурса, получения метаданных (например, размер файла, тип контента, дата модификации) без загрузки всего содержимого.

Синтаксис

goresp, err := client.Head(url)

Базовый пример

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

gopackage main

import (
  "fmt"
  "net/http"
)

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

  fmt.Println("Status:", resp.Status)
}

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

go"Status: 200 OK"

Пример

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

gopackage main

import (
  "fmt"
  "net/http"
)

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

  fmt.Println("Content-Type:", resp.Header.Get("Content-Type"))
  fmt.Println("Content-Length:", resp.Header.Get("Content-Length"))
  fmt.Println("Server:", resp.Header.Get("Server"))
}

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

go"Content-Type: text/html; charset=UTF-8"
"Content-Length: 1256"
"Server: ECS (dce/0198)"

Пример

Если ресурс недоступен, метод вернет ошибку. Давайте попробуем выполнить HEAD-запрос к несуществующему URL:

gopackage main

import (
  "fmt"
  "net/http"
)

func main() {
  client := &http.Client{}
  resp, err := client.Head("https://example.com/notfound")
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  defer resp.Body.Close()

  fmt.Println("Status:", resp.Status)
}

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

go"Status: 404 Not Found"

Пример

HEAD-запрос можно использовать для проверки существования ресурса без загрузки тела ответа. Давайте проверим доступность файла на сервере:

gopackage main

import (
  "fmt"
  "net/http"
)

func main() {
  client := &http.Client{}
  url := "https://example.com/file.pdf"
  resp, err := client.Head(url)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  defer resp.Body.Close()

  if resp.StatusCode == http.StatusOK {
    fmt.Println("File exists")
  } else {
    fmt.Println("File not found:", resp.Status)
  }
}

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

go"File not found: 404 Not Found"

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

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