Skip to content

Константы и типы

BodyKind

go
type BodyKind int

Тип тела запроса, используется в WithBody для указания формата тела.

КонстантаЗначениеОписаниеContent-Type
BodyAuto0АвтоопределениеПо типу данных
BodyJSON1Принудительный JSONapplication/json
BodyXML2Принудительный XMLapplication/xml
BodyForm3Формаapplication/x-www-form-urlencoded
BodyBinary4Бинарныйapplication/octet-stream
BodyMultipart5Multipartmultipart/form-data

Правила автоопределения BodyAuto

Тип входных данныхContent-Type
stringtext/plain; charset=utf-8
[]byteapplication/octet-stream
*FormDatamultipart/form-data
io.Readerне устанавливается
map[string]stringapplication/x-www-form-urlencoded
Другие типыapplication/json
go
// Автоопределение (по умолчанию)
result, _ := client.Post(url, httpc.WithBody(data))

// Принудительный JSON
result, _ := client.Post(url, httpc.WithBody(data, httpc.BodyJSON))

// Принудительный XML
result, _ := client.Post(url, httpc.WithBody(data, httpc.BodyXML))

FormData / FileData

FormData

go
type FormData struct {
    Fields map[string]string
    Files  map[string]*FileData
}

FileData

go
type FileData struct {
    Filename    string
    Content     []byte
    ContentType string  // MIME-тип, например "image/png", "application/pdf"
}
go
form := &httpc.FormData{
    Fields: map[string]string{"key": "value"},
    Files: map[string]*httpc.FileData{
        "file": {Filename: "test.txt", Content: []byte("hello"), ContentType: "text/plain"},
    },
}
result, err := client.Post(url, httpc.WithFormData(form))

События аудита

AuditEvent

go
type AuditEvent struct {
    Timestamp     time.Time           `json:"timestamp"`
    Method        string              `json:"method"`
    URL           string              `json:"url"`           // Маскировано (учётные данные удалены)
    StatusCode    int                 `json:"statusCode"`
    Duration      time.Duration       `json:"duration"`
    Attempts      int                 `json:"attempts"`
    Error         error               `json:"error,omitempty"`
    SourceIP      string              `json:"sourceIP,omitempty"`
    UserID        string              `json:"userID,omitempty"`
    RedirectChain []string            `json:"redirectChain,omitempty"`
    ReqHeaders    map[string][]string `json:"reqHeaders,omitempty"`
    RespHeaders   map[string][]string `json:"respHeaders,omitempty"`
}

AuditMiddlewareConfig

go
type AuditMiddlewareConfig struct {
    Format         string   // "text" или "json"
    IncludeHeaders bool     // Включать заголовки запроса/ответа
    MaskHeaders    []string // Имена заголовков для маскировки
    SanitizeError  bool     // Маскировать информацию об ошибках
}

Ключи контекста

КонстантаТипОписание
SourceIPKeyauditContextKeyИсходный IP в событии аудита
UserIDKeyauditContextKeyИдентификатор пользователя в событии аудита
go
// Передача информации аудита через context
ctx := context.WithValue(context.Background(), httpc.SourceIPKey, "192.168.1.1")
ctx = context.WithValue(ctx, httpc.UserIDKey, "user-123")

// Настройка промежуточного ПО аудита в Config
cfg := httpc.DefaultConfig()
cfg.Middleware.Middlewares = []httpc.MiddlewareFunc{
    httpc.AuditMiddleware(func(event httpc.AuditEvent) {
        fmt.Println(event.SourceIP) // 192.168.1.1
        fmt.Println(event.UserID)   // user-123
    }),
}
client, _ := httpc.New(cfg)

// Значения из context будут прочитаны промежуточным ПО при отправке запроса
result, err := client.Request(ctx, "GET", url)

См. также