Тип http.Client
Тип http.Client из пакета net/http представляет собой HTTP-клиент,
который позволяет выполнять запросы к веб-серверам. В отличие от функций
http.Get или http.Post, использование http.Client
дает больше контроля над запросами: можно настроить таймауты, управлять
куки, использовать собственный транспорт и переиспользовать один экземпляр
для множества запросов. Поля структуры включают Timeout —
ограничение времени выполнения запроса, Jar — хранилище для куки,
и Transport — настройки сетевого уровня.
Синтаксис
client := &http.Client{
Timeout: 10 * time.Second,
}
Пример
Создадим клиент с таймаутом 5 секунд и выполним GET-запрос к публичному API:
package main
import (
"fmt"
"net/http"
"time"
)
func main() {
client := &http.Client{
Timeout: 5 * time.Second,
}
resp, err := client.Get("https://httpbin.org/get")
if err != nil {
fmt.Println("Error:", err)
return
}
defer resp.Body.Close()
fmt.Println("Status:", resp.Status)
}
Результат выполнения кода:
"Status: 200 OK"
Пример
Используем клиент для отправки POST-запроса с данными формы:
package main
import (
"fmt"
"net/http"
"net/url"
"time"
)
func main() {
client := &http.Client{
Timeout: 10 * time.Second,
}
data := url.Values{
"key1": {"value1"},
"key2": {"value2"},
}
resp, err := client.PostForm("https://httpbin.org/post", data)
if err != nil {
fmt.Println("Error:", err)
return
}
defer resp.Body.Close()
fmt.Println("Status:", resp.Status)
}
Результат выполнения кода:
"Status: 200 OK"
Пример
Переиспользуем один клиент для нескольких запросов и настроим куки-хранилище:
package main
import (
"fmt"
"net/http"
"net/http/cookiejar"
"time"
)
func main() {
jar, _ := cookiejar.New(nil)
client := &http.Client{
Timeout: 5 * time.Second,
Jar: jar,
}
// Первый запрос — сохраняем куки
resp1, _ := client.Get("https://httpbin.org/cookies/set?name=value")
resp1.Body.Close()
// Второй запрос — куки будут отправлены автоматически
resp2, _ := client.Get("https://httpbin.org/cookies")
defer resp2.Body.Close()
fmt.Println("Status:", resp2.Status)
}
Результат выполнения кода:
"Status: 200 OK"
Смотрите также
-
метод
Client.Do,
который выполняет произвольный запрос -
метод
Client.Get,
который выполняет GET-запрос -
метод
Client.Post,
который выполняет POST-запрос -
тип
Transport,
который управляет сетевым уровнем клиента