Documentation
¶
Index ¶
- Constants
- Variables
- func ValidateSessionFile(path string) error
- type CookieData
- type CookieJar
- func (j *CookieJar) BuildCookieHeader(requestHost, requestPath string, requestSecure bool) string
- func (j *CookieJar) Clear()
- func (j *CookieJar) ClearExpired()
- func (j *CookieJar) Count() int
- func (j *CookieJar) Export() map[string][]CookieState
- func (j *CookieJar) Get(requestHost, requestPath string, requestSecure bool) []*CookieData
- func (j *CookieJar) GetAll() map[string]string
- func (j *CookieJar) Import(cookies map[string][]CookieState)
- func (j *CookieJar) ImportV4(cookies []CookieState)
- func (j *CookieJar) Set(requestHost string, cookie *CookieData, requestSecure bool)
- func (j *CookieJar) SetSimple(name, value string)
- type CookieState
- type Manager
- func (m *Manager) CloseSession(sessionID string) error
- func (m *Manager) CreateSession(config *protocol.SessionConfig) (string, error)
- func (m *Manager) GetSession(sessionID string) (*Session, error)
- func (m *Manager) ListSessions() []SessionStats
- func (m *Manager) SessionCount() int
- func (m *Manager) SetMaxSessions(max int)
- func (m *Manager) SetSessionTimeout(timeout time.Duration)
- func (m *Manager) Shutdown()
- type Session
- func (s *Session) ClearCache()
- func (s *Session) ClearCookies()
- func (s *Session) Close()
- func (s *Session) Get(ctx context.Context, url string, headers map[string][]string) (*transport.Response, error)
- func (s *Session) GetCookies() map[string]string
- func (s *Session) GetHeaderOrder() []string
- func (s *Session) GetProxy() string
- func (s *Session) GetStream(ctx context.Context, url string, headers map[string][]string) (*StreamResponse, error)
- func (s *Session) GetTCPProxy() string
- func (s *Session) GetTransport() *transport.Transport
- func (s *Session) GetUDPProxy() string
- func (s *Session) IdleTime() time.Duration
- func (s *Session) IsActive() bool
- func (s *Session) Marshal() ([]byte, error)
- func (s *Session) Post(ctx context.Context, url string, body []byte, headers map[string][]string) (*transport.Response, error)
- func (s *Session) PostStream(ctx context.Context, url string, body []byte, headers map[string][]string) (*StreamResponse, error)
- func (s *Session) Refresh()
- func (s *Session) RefreshWithProtocol(proto string) error
- func (s *Session) Request(ctx context.Context, req *transport.Request) (*transport.Response, error)
- func (s *Session) RequestStream(ctx context.Context, req *transport.Request) (*StreamResponse, error)
- func (s *Session) Save(path string) error
- func (s *Session) SetCookie(name, value string)
- func (s *Session) SetCookies(cookies map[string]string)
- func (s *Session) SetHeaderOrder(order []string)
- func (s *Session) SetProxy(proxyURL string)
- func (s *Session) SetSessionIdentifier(sessionId string)
- func (s *Session) SetTCPProxy(proxyURL string)
- func (s *Session) SetUDPProxy(proxyURL string)
- func (s *Session) Stats() SessionStats
- func (s *Session) Touch()
- type SessionOptions
- type SessionState
- type SessionStateV4
- type SessionStats
- type StreamResponse
Constants ¶
const SessionStateVersion = 5
Variables ¶
var (
ErrSessionClosed = errors.New("session is closed")
)
Functions ¶
func ValidateSessionFile ¶ added in v1.5.5
ValidateSessionFile validates a session file without loading it
Types ¶
type CookieData ¶ added in v1.5.10
type CookieData struct {
Name string
Value string
Domain string // Normalized domain (with leading dot for domain cookies)
HostOnly bool // True if cookie should only be sent to exact host
Path string
Expires *time.Time
MaxAge int
Secure bool
HttpOnly bool
SameSite string
CreatedAt time.Time
}
CookieData extends CookieState with creation time for sorting
type CookieJar ¶ added in v1.5.10
type CookieJar struct {
// contains filtered or unexported fields
}
CookieJar manages cookies with proper domain and path scoping Cookies are stored by domain, then by (path, name) tuple
func NewCookieJar ¶ added in v1.5.10
func NewCookieJar() *CookieJar
NewCookieJar creates a new empty cookie jar
func (*CookieJar) BuildCookieHeader ¶ added in v1.5.10
BuildCookieHeader builds the Cookie header value for a request
func (*CookieJar) ClearExpired ¶ added in v1.5.10
func (j *CookieJar) ClearExpired()
ClearExpired removes all expired cookies
func (*CookieJar) Count ¶ added in v1.5.10
Count returns the total number of cookies across all domains
func (*CookieJar) Export ¶ added in v1.5.10
func (j *CookieJar) Export() map[string][]CookieState
Export exports all cookies grouped by domain for serialization
func (*CookieJar) Get ¶ added in v1.5.10
func (j *CookieJar) Get(requestHost, requestPath string, requestSecure bool) []*CookieData
Get returns all cookies that should be sent for a request requestHost is the target host requestPath is the request path requestSecure is true if the request is over HTTPS
func (*CookieJar) Import ¶ added in v1.5.10
func (j *CookieJar) Import(cookies map[string][]CookieState)
Import imports cookies from the v5 format (domain-keyed)
func (*CookieJar) ImportV4 ¶ added in v1.5.10
func (j *CookieJar) ImportV4(cookies []CookieState)
ImportV4 imports cookies from the v4 format (flat list)
type CookieState ¶ added in v1.5.5
type CookieState struct {
Name string `json:"name"`
Value string `json:"value"`
Domain string `json:"domain,omitempty"`
Path string `json:"path,omitempty"`
Expires *time.Time `json:"expires,omitempty"`
MaxAge int `json:"max_age,omitempty"`
Secure bool `json:"secure,omitempty"`
HttpOnly bool `json:"http_only,omitempty"`
SameSite string `json:"same_site,omitempty"`
CreatedAt *time.Time `json:"created_at,omitempty"` // v5: for sorting
}
CookieState represents a serializable cookie with full metadata
type Manager ¶
type Manager struct {
// contains filtered or unexported fields
}
Manager manages all active sessions
func (*Manager) CloseSession ¶
CloseSession closes and removes a session
func (*Manager) CreateSession ¶
func (m *Manager) CreateSession(config *protocol.SessionConfig) (string, error)
CreateSession creates a new session and returns its ID
func (*Manager) GetSession ¶
GetSession retrieves a session by ID
func (*Manager) ListSessions ¶
func (m *Manager) ListSessions() []SessionStats
ListSessions returns stats for all active sessions
func (*Manager) SessionCount ¶
SessionCount returns the number of active sessions
func (*Manager) SetMaxSessions ¶
SetMaxSessions sets the maximum number of concurrent sessions
func (*Manager) SetSessionTimeout ¶
SetSessionTimeout sets the session idle timeout
type Session ¶
type Session struct {
ID string
CreatedAt time.Time
LastUsed time.Time
RequestCount int64
Config *protocol.SessionConfig
// contains filtered or unexported fields
}
Session represents a persistent HTTP session with connection affinity
func LoadSession ¶ added in v1.5.5
LoadSession loads a session from a file
func NewSession ¶
func NewSession(id string, config *protocol.SessionConfig) *Session
NewSession creates a new session with its own connection pool
func NewSessionWithOptions ¶ added in v1.5.8
func NewSessionWithOptions(id string, config *protocol.SessionConfig, opts *SessionOptions) *Session
NewSessionWithOptions creates a new session with additional options for distributed caching etc.
func UnmarshalSession ¶ added in v1.5.5
UnmarshalSession loads a session from JSON bytes
func (*Session) ClearCache ¶
func (s *Session) ClearCache()
ClearCache clears all cached URLs (removes If-None-Match/If-Modified-Since headers)
func (*Session) ClearCookies ¶
func (s *Session) ClearCookies()
ClearCookies removes all cookies from this session
func (*Session) Close ¶
func (s *Session) Close()
Close marks the session as inactive and closes connections
func (*Session) Get ¶
func (s *Session) Get(ctx context.Context, url string, headers map[string][]string) (*transport.Response, error)
Get performs a GET request
func (*Session) GetCookies ¶
GetCookies returns all cookies for this session (name -> value) Note: This returns a flat map for backward compatibility. Multiple cookies with the same name from different domains will only show the last one.
func (*Session) GetHeaderOrder ¶ added in v1.5.8
GetHeaderOrder returns the current header order. Returns preset's default order if no custom order is set.
func (*Session) GetProxy ¶ added in v1.5.8
GetProxy returns the current proxy URL (unified proxy or TCP proxy)
func (*Session) GetStream ¶ added in v1.5.3
func (s *Session) GetStream(ctx context.Context, url string, headers map[string][]string) (*StreamResponse, error)
GetStream performs a streaming GET request
func (*Session) GetTCPProxy ¶ added in v1.5.8
GetTCPProxy returns the current TCP proxy URL
func (*Session) GetTransport ¶
GetTransport returns the session's transport
func (*Session) GetUDPProxy ¶ added in v1.5.8
GetUDPProxy returns the current UDP proxy URL
func (*Session) Post ¶
func (s *Session) Post(ctx context.Context, url string, body []byte, headers map[string][]string) (*transport.Response, error)
Post performs a POST request
func (*Session) PostStream ¶ added in v1.5.3
func (s *Session) PostStream(ctx context.Context, url string, body []byte, headers map[string][]string) (*StreamResponse, error)
PostStream performs a streaming POST request
func (*Session) Refresh ¶ added in v1.5.10
func (s *Session) Refresh()
Refresh closes all connections but keeps TLS session caches and cookies intact. This simulates a browser page refresh - new TCP/QUIC connections but TLS resumption. If a switchProtocol was configured, the session switches to that protocol.
func (*Session) RefreshWithProtocol ¶ added in v1.6.0
RefreshWithProtocol closes all connections and switches to a new protocol. The protocol change persists for future Refresh() calls as well. Valid protocols: "h1", "h2", "h3", "auto".
func (*Session) RequestStream ¶ added in v1.5.3
func (s *Session) RequestStream(ctx context.Context, req *transport.Request) (*StreamResponse, error)
RequestStream executes an HTTP request and returns a streaming response The caller is responsible for closing the response when done Note: Streaming does NOT support redirects - use Request() for redirect handling
func (*Session) SetCookie ¶
SetCookie sets a cookie for this session Note: This sets a "global" cookie that will be sent to all domains. For domain-specific cookies, use Set-Cookie headers from responses.
func (*Session) SetCookies ¶
SetCookies sets multiple cookies for this session Note: These are "global" cookies that will be sent to all domains.
func (*Session) SetHeaderOrder ¶ added in v1.5.8
SetHeaderOrder sets a custom header order for all requests. Pass nil or empty slice to reset to preset's default order. Order should contain lowercase header names.
func (*Session) SetProxy ¶ added in v1.5.8
SetProxy sets or updates the proxy for all protocols (HTTP/1.1, HTTP/2, HTTP/3) This closes existing connections and recreates transports with the new proxy
func (*Session) SetSessionIdentifier ¶ added in v1.5.8
SetSessionIdentifier sets a session identifier for TLS cache key isolation. This is used when the session is registered with a LocalProxy to ensure TLS sessions are isolated per proxy/session configuration.
func (*Session) SetTCPProxy ¶ added in v1.5.8
SetTCPProxy sets the proxy for TCP protocols (HTTP/1.1, HTTP/2)
func (*Session) SetUDPProxy ¶ added in v1.5.8
SetUDPProxy sets the proxy for UDP protocols (HTTP/3 via SOCKS5 or MASQUE)
type SessionOptions ¶ added in v1.5.8
type SessionOptions struct {
// SessionCacheBackend is an optional distributed cache for TLS sessions
SessionCacheBackend transport.SessionCacheBackend
// SessionCacheErrorCallback is called when backend operations fail
SessionCacheErrorCallback transport.ErrorCallback
}
SessionOptions contains additional options that can't be expressed in protocol.SessionConfig (e.g., interfaces and callbacks that can't be JSON serialized)
type SessionState ¶ added in v1.5.5
type SessionState struct {
Version int `json:"version"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
// Full session configuration - saves everything
Config *protocol.SessionConfig `json:"config"`
// Session data - v5 format: cookies keyed by domain
// Key is the domain (e.g., ".example.com" for domain cookies, "example.com" for host-only)
Cookies map[string][]CookieState `json:"cookies"`
// TLS Sessions keyed by origin "protocol:host:port"
// e.g., "h2:example.com:443", "h3:api.example.com:443"
TLSSessions map[string]transport.TLSSessionState `json:"tls_sessions"`
// ECHConfigs stores ECH configurations per domain (base64 encoded)
// This is essential for session resumption - the same ECH config must be used
// when resuming as was used when creating the session ticket
ECHConfigs map[string]string `json:"ech_configs,omitempty"`
}
SessionState represents the complete saveable session state
type SessionStateV4 ¶ added in v1.5.10
type SessionStateV4 struct {
Version int `json:"version"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
Config *protocol.SessionConfig `json:"config"`
Cookies []CookieState `json:"cookies"` // v4: flat list
TLSSessions map[string]transport.TLSSessionState `json:"tls_sessions"`
ECHConfigs map[string]string `json:"ech_configs,omitempty"`
}
SessionStateV4 represents the v4 format for migration
type SessionStats ¶
type SessionStats struct {
ID string
Preset string
CreatedAt time.Time
LastUsed time.Time
RequestCount int64
Active bool
CookieCount int
CacheEntryCount int // Number of cached URLs (for If-None-Match/If-Modified-Since)
Age time.Duration
IdleTime time.Duration
TransportStats map[string]interface{}
}
SessionStats contains session statistics
type StreamResponse ¶ added in v1.5.3
type StreamResponse = transport.StreamResponse
StreamResponse wraps transport.StreamResponse for session-level streaming