Метод http.Client.Head
Метод http.Client.Head выполняет HTTP HEAD-запрос
к указанному URL. Он отправляет запрос без тела и получает
только заголовки ответа. Первым параметром метод принимает
строку с URL-адресом. Метод возвращает указатель на
http.Response и ошибку, если она возникла.
HEAD-запросы полезны для проверки доступности ресурса,
получения метаданных (например, размер файла, тип контента,
дата модификации) без загрузки всего содержимого.
Синтаксис
resp, err := client.Head(url)
Базовый пример
Давайте выполним HEAD-запрос к публичному ресурсу и выведем статус ответа:
package 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)
}
Результат выполнения кода:
"Status: 200 OK"
Пример
Давайте прочитаем заголовки ответа, полученные в результате HEAD-запроса, и выведем их на экран:
package 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"))
}
Результат выполнения кода:
"Content-Type: text/html; charset=UTF-8"
"Content-Length: 1256"
"Server: ECS (dce/0198)"
Пример
Если ресурс недоступен, метод вернет ошибку. Давайте попробуем выполнить HEAD-запрос к несуществующему URL:
package 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)
}
Результат выполнения кода:
"Status: 404 Not Found"
Пример
HEAD-запрос можно использовать для проверки существования ресурса без загрузки тела ответа. Давайте проверим доступность файла на сервере:
package 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)
}
}
Результат выполнения кода:
"File not found: 404 Not Found"
Смотрите также
-
метод
http.Client.Get,
который выполняет GET-запрос и получает тело ответа -
метод
http.Client.Post,
который выполняет POST-запрос с телом -
метод
http.Client.Do,
который выполняет произвольный HTTP-запрос -
функцию
http.Head,
которая выполняет HEAD-запрос используя DefaultClient