Переменная http.DefaultClient
Переменная http.DefaultClient представляет собой экземпляр
клиента HTTP, который используется по умолчанию при выполнении
запросов с помощью функций пакета net/http, таких как
http.Get, http.Post и других. Она упрощает выполнение
HTTP-запросов, освобождая разработчика от необходимости создавать
собственный экземпляр клиента. Однако стоит помнить, что
http.DefaultClient не имеет таймаутов по умолчанию, поэтому
для продакшн-среды рекомендуется создавать собственный клиент с
настроенными таймаутами.
Синтаксис
import "net/http"
http.DefaultClient
Пример
Давайте выполним GET-запрос с использованием http.DefaultClient
и получим данные с веб-страницы:
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
resp, err := http.DefaultClient.Get("https://example.com")
if err != nil {
fmt.Println("Error:", err)
return
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
fmt.Println("Error reading body:", err)
return
}
fmt.Printf("Status: %s\n", resp.Status)
fmt.Printf("Body length: %d bytes\n", len(body))
}
Результат выполнения кода:
"Status: 200 OK"
"Body length: 1256 bytes"
Пример
Давайте создадим POST-запрос с использованием
http.DefaultClient и передадим данные в формате JSON:
package main
import (
"bytes"
"fmt"
"io"
"net/http"
)
func main() {
jsonData := []byte(`{"name": "John", "age": 30}`)
resp, err := http.DefaultClient.Post(
"https://httpbin.org/post",
"application/json",
bytes.NewBuffer(jsonData),
)
if err != nil {
fmt.Println("Error:", err)
return
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
fmt.Println("Error reading body:", err)
return
}
fmt.Printf("Status: %s\n", resp.Status)
fmt.Printf("Response: %s\n", string(body))
}
Результат выполнения кода:
"Status: 200 OK"
"Response: {\"args\":{}, \"data\":\"{\\\"name\\\": \\\"John\\\", \\\"age\\\": 30}\", ...}"
Пример
Давайте настроим таймауты для http.DefaultClient,
изменив его поле Timeout:
package main
import (
"fmt"
"net/http"
"time"
)
func main() {
http.DefaultClient.Timeout = 5 * time.Second
start := time.Now()
resp, err := http.DefaultClient.Get("https://example.com")
elapsed := time.Since(start)
if err != nil {
fmt.Println("Error:", err)
return
}
defer resp.Body.Close()
fmt.Printf("Status: %s\n", resp.Status)
fmt.Printf("Time taken: %v\n", elapsed)
}
Результат выполнения кода:
"Status: 200 OK"
"Time taken: 1.234s"
Смотрите также
-
структуру
http.Client,
которая предоставляет гибкую настройку HTTP-клиента -
метод
http.Client.Do,
который выполняет HTTP-запрос с настраиваемым клиентом -
переменную
http.DefaultTransport,
которая определяет транспорт по умолчанию для HTTP-клиента -
функцию
http.Get,
которая выполняет GET-запрос через стандартный клиент