Пакет http

import "net/http"

Обзор

Пакет http предоставляет HTTP клиент-серверные реализации.

Get, Head, Post и PostForm обрабатывают HTTP (или HTTPS) запросы:

resp, err := http.Get("http://example.com/")
...
resp, err := http.Post("http://example.com/upload", "image/jpeg", &buf)
...
resp, err := http.PostForm("http://example.com/form", url.Values{"key": {"Value"}, "id": {"123"}})

После завершения работы клиент должен закрыть тело ответа:

resp, err := http.Get("http://example.com/")
if err != nil {
    // handle error
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
// ...

Для управления заголовками HTTP клиента, редиректами и другими параметрами создайте Client:

client := &http.Client{
    CheckRedirect: redirectPolicyFunc,
}

resp, err := client.Get("http://example.com")
// ...

req, err := http.NewRequest("GET", "http://example.com", nil)
// ...
req.Header.Add("If-None-Match", `W/"wyzzy"`)
resp, err := client.Do(req)
// ...

Для управления прокси, TLS конфигурацией, сохранением активности, сжатием и другими настройками создайте Transport:

tr := &http.Transport{
    MaxIdleConns:       10,
    IdleConnTimeout:    30 * time.Second,
    DisableCompression: true,
}
client := &http.Client{Transport: tr}
resp, err := client.Get("https://example.com")

Clients и Transports можно безопасно использовать одновременно несколькими горутинами, и для повышения эффективности их следует создавать только один раз и затем использовать повторно.

ListenAndServe запускает HTTP-сервер с указанным адресом и обработчиком. Обработчик обычно равен nil, что означает использование DefaultServeMux. Handle и HandleFunc добавляют обработчики к DefaultServeMux:

http.Handle("/foo", fooHandler)

http.HandleFunc("/bar", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.Path))
})

log.Fatal(http.ListenAndServe(":8080", nil))

Дополнительный контроль над поведением сервера можно получить, создав кастомный Server:

s := &http.Server{
    Addr:           ":8080",
    Handler:        myHandler,
    ReadTimeout:    10 * time.Second,
    WriteTimeout:   10 * time.Second,
    MaxHeaderBytes: 1 << 20,
}
log.Fatal(s.ListenAndServe())

Начиная с Go 1.6, пакет http имеет поддержку протокола HTTP/2 при использовании HTTPS. Программы, которые должны отключить HTTP/2, могут сделать это, установив Transport.TLSNextProto (для клиентов) или Server.TLSNextProto (для серверов) на не nil, пустую карту. В качестве альтернативы в настоящее время поддерживаются следующие виртуальные среды переменных GODEBUG:

GODEBUG=http2client=0  # disable HTTP/2 client support
GODEBUG=http2server=0  # disable HTTP/2 server support
GODEBUG=http2debug=1   # enable verbose HTTP/2 debug logs
GODEBUG=http2debug=2   # ... even more verbose, with frame dumps

Переменные GODEBUG не обещают полной совместимости с Go API. Перед отключением поддержки HTTP/2 сообщите о любых проблемах: https://golang.org/s/http2bug

Transport и Server пакета http осуществляют автоматическую поддержку HTTP/2 для простых конфигураций.

Чтобы включить HTTP/2 для более сложных конфигураций, следует использовать более низкоуровневые функции HTTP/2 или использовать более новую версию пакета http2, импортируйте «golang.org/x/net/http2» напрямую и используйте свой ConfigureTransport и/или ConfigureServer. Ручная настройка HTTP/2 через пакет «golang.org/x/net/http2» имеет приоритет над встроенной поддержкой HTTP/2 пакета net/http.

results matching ""

    No results matching ""