cpp

Структура Request: HTTP-запрос

Структура Request из пакета net/http описывает HTTP-запрос. Объявление структуры:

// import "net/url"
type Request struct {
   Method string
   URL *url.URL
   Proto      string
   ProtoMajor int
   ProtoMinor int
   Header Header
   Body io.ReadCloser
   GetBody func() (io.ReadCloser, error)
   ContentLength int64
   TransferEncoding []string
   Close bool
   Host string
   Form url.Values
   PostForm url.Values
   MultipartForm *multipart.Form
   Trailer Header
   RemoteAddr string
   RequestURI string
   TLS *tls.ConnectionState
   Cancel <-chan struct{}
   Response *Response
   ctx context.Context
}

Создать экземпляр структуры Request позволяет функция NewRequest(). Формат функции:

http.NewRequest(method string, url string,
                body io.Reader) (*http.Request, error)

В первом параметре указывается метод передачи данных: GET, POST, HEAD и др. Во втором параметре передается URL-адрес. В третьем параметре можно указать поток ввода или значение nil. Функция возвращает два значения. Через первое возвращаемое значение доступен указатель на экземпляр структуры Request. Через второе возвращаемое значение доступен объект ошибки или значение nil, если операция выполнена успешно. Пример:

req, err := http.NewRequest("GET", "http://localhost/index.php?x=5", nil)
if err != nil {
   fmt.Println(err)
   return
}
// Название робота
req.Header.Set("User-Agent", "MySpider/1.0")
// Откуда выполнен переход
req.Header.Set("Referer", "/index.php")
fmt.Println(req.Method)      // GET
fmt.Println(req.URL)         // http://localhost/index.php?x=5
fmt.Println(req.Proto)       // HTTP/1.1
fmt.Println(req.Host)        // localhost

Выполнить запрос на основе экземпляра структуры Request позволяет метод Do() структуры Client. Формат метода:

(*http.Client).Do(req *http.Request) (*http.Response, error)

Структура Request содержит следующие основные методы (полный список смотрите в документации):

  • AddCookie() — добавляет cookies. Формат метода:
(*http.Request).AddCookie(c *http.Cookie)

Пример:

req.AddCookie(&http.Cookie{Name: "a", Value: "12"})
  • Cookie() — позволяет получить cookies с указанным именем. Формат метода:
(*http.Request).Cookie(name string) (*http.Cookie, error)

Пример:

fmt.Println(req.Cookie("a")) // a=12 <nil>
fmt.Println(req.Cookie("b")) //  http: named cookie not present
  • Cookies() — возвращает слайс со всеми cookies. Формат метода:
(*http.Request).Cookies() []*http.Cookie

Пример:

fmt.Println(req.Cookies())   // [a=12]
  • SetBasicAuth() — задает логин и пароль для аутентификации. Формат метода:
(*http.Request).SetBasicAuth(username string, password string)

Пример:

req.SetBasicAuth("user", "password")
  • BasicAuth() — позволяет получить логин и пароль для аутентификации. Формат метода:
(*http.Request).BasicAuth() (username string, password string,
                             ok bool)

Пример:

fmt.Println(req.BasicAuth()) // user password true
  • UserAgent() — возвращает значение заголовка User-Agent (название робота). Формат метода:
(*http.Request).UserAgent() string

Пример:

req.Header.Set("User-Agent", "MySpider/1.0")
fmt.Println(req.UserAgent()) // MySpider/1.0
  • Referer() — возвращает значение заголовка Referer (откуда был выполнен переход). Формат метода:
(*http.Request).Referer() string

Пример:

req.Header.Set("Referer", "/index.php")
fmt.Println(req.Referer())   // /index.php
  • FormValue() — позволяет получить данные формы по ключу (см. разд. 20.9). Формат метода:
(*http.Request).FormValue(key string) string
  • Write() — записывает параметры запроса в поток. Формат метода:
(*http.Request).Write(w io.Writer) error

Пример:

buf := &bytes.Buffer{}
req.Write(buf)
fmt.Println(string(buf.Bytes()))

Результат:

GET /index.php?x=5 HTTP/1.1
Host: localhost
User-Agent: MySpider/1.0
Cookie: a=12
Referer: /index.php

Учебник Go (Golang)
Учебник Go (Golang) в формате PDF

Реквизиты

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

cpp