Метод http.Request.AddCookie

Метод http.Request.AddCookie добавляет файл cookie к HTTP-запросу. В качестве параметра метод принимает указатель на структуру http.Cookie. Добавленные cookie будут отправлены на сервер вместе с запросом. Метод автоматически устанавливает заголовок Cookie в запросе, добавляя новое значение к уже существующим.

Синтаксис

goreq.AddCookie(cookie)

где req - это экземпляр http.Request, а cookie - указатель на структуру http.Cookie с именем и значением для добавления.

Пример

Давайте создадим новый HTTP-запрос и добавим к нему cookie с именем "username" и значением "john_doe":

gopackage main

import (
  "fmt"
  "net/http"
)

func main() {
  req, _ := http.NewRequest("GET", "https://example.com", nil)

  cookie := &http.Cookie{
    Name:  "username",
    Value: "john_doe",
  }
  req.AddCookie(cookie)

  fmt.Println(req.Header.Get("Cookie"))
}

Результат выполнения кода:

go"username=john_doe"

Пример

Добавим несколько cookie к одному запросу, используя последовательные вызовы метода:

gopackage main

import (
  "fmt"
  "net/http"
)

func main() {
  req, _ := http.NewRequest("GET", "https://example.com", nil)

  req.AddCookie(&http.Cookie{
    Name:  "session_id",
    Value: "abc123",
  })
  req.AddCookie(&http.Cookie{
    Name:  "user_id",
    Value: "42",
  })
  req.AddCookie(&http.Cookie{
    Name:  "lang",
    Value: "ru",
  })

  fmt.Println(req.Header.Get("Cookie"))
}

Результат выполнения кода:

go"session_id=abc123; user_id=42; lang=ru"

Пример

Если cookie с таким именем уже существует, то новое значение будет добавлено отдельной записью. Давайте проверим это на практике:

gopackage main

import (
  "fmt"
  "net/http"
)

func main() {
  req, _ := http.NewRequest("GET", "https://example.com", nil)

  req.AddCookie(&http.Cookie{
    Name:  "theme",
    Value: "dark",
  })
  req.AddCookie(&http.Cookie{
    Name:  "theme",
    Value: "light",
  })

  fmt.Println(req.Header.Get("Cookie"))
}

Результат выполнения кода:

go"theme=dark; theme=light"

Пример

Метод AddCookie часто используется вместе с методом Cookies, который возвращает все cookie запроса. Давайте добавим cookie и сразу их проверим:

gopackage main

import (
  "fmt"
  "net/http"
)

func main() {
  req, _ := http.NewRequest("GET", "https://example.com", nil)

  req.AddCookie(&http.Cookie{
    Name:  "preference",
    Value: "dark_mode",
  })

  cookies := req.Cookies()
  for _, c := range cookies {
    fmt.Printf("Name: %s, Value: %s\n", c.Name, c.Value)
  }
}

Результат выполнения кода:

go"Name: preference, Value: dark_mode"

Смотрите также

  • метод http.Request.Cookie,
    который возвращает конкретный cookie по имени
  • метод http.Request.Cookies,
    который возвращает все cookie запроса
  • функцию http.SetCookie,
    которая добавляет cookie в HTTP-ответ
  • функцию http.NewRequest,
    которая создает новый HTTP-запрос