Как правильно прописать куки в запросе?

В языке программирования Go куки (cookies) могут быть прописаны в заголовках HTTP запросов. Для этого вы можете использовать стандартный пакет net/http.

Для начала, вам нужно создать объект http.Cookie. Он содержит информацию о куки, включая его имя, значение и другие атрибуты.

cookie := &http.Cookie{
    Name:  "mycookie",
    Value: "hello",
}

Затем вы можете присоединить этот объект Cookie к вашему запросу. Обычно это делается с помощью метода http.Request.AddCookie().

req, err := http.NewRequest("GET", "http://example.com", nil)
if err != nil {
    log.Fatal(err)
}

req.AddCookie(cookie)

Если у вас уже есть объект http.Request, то вы можете использовать http.Request.Cookie() для разбора куки из заголовка запроса.

req, err := http.NewRequest("GET", "http://example.com", nil)
if err != nil {
    log.Fatal(err)
}

cookie, err := req.Cookie("mycookie")
if err != nil {
    log.Fatal(err)
}

fmt.Println(cookie.Value)

Когда вы отправляете запрос с куки, они автоматически включаются в заголовок HTTP запроса по умолчанию. Они будут добавлены в строку заголовков в виде Cookie: name=value:

resp, err := client.Do(req)
if err != nil {
    log.Fatal(err)
}

for _, cookie := range resp.Cookies() {
    fmt.Println(cookie.Name, cookie.Value)
}

Если вы хотите задать дополнительные атрибуты куки, такие как срок годности, путь, домен или безопасность, вы можете использовать дополнительные поля структуры http.Cookie. Например:

cookie := &http.Cookie{
    Name:     "mycookie",
    Value:    "hello",
    Expires:  time.Now().Add(24 * time.Hour),
    HttpOnly: true,
}

Это позволит куки существовать в течение 24 часов и не будет доступен для клиентского скрипта JavaScript.

Наконец, при разработке веб-приложений, обязательно принимайте во внимание безопасность и контроль кук. Не храните важные данные в куках и всегда проверяйте входные данные, чтобы предотвратить атаки на куки.