Documentation
ΒΆ
Overview ΒΆ
Package httpcloak provides an HTTP client with perfect browser TLS/HTTP fingerprinting.
httpcloak allows you to make HTTP requests that are indistinguishable from real browsers, bypassing TLS fingerprinting, HTTP/2 fingerprinting, and header-based bot detection.
Basic usage:
client := httpcloak.New("chrome-131")
defer client.Close()
resp, err := client.Get(ctx, "https://example.com")
if err != nil {
log.Fatal(err)
}
fmt.Println(string(resp.Body))
With options:
client := httpcloak.New("chrome-131",
httpcloak.WithTimeout(30*time.Second),
httpcloak.WithProxy("http://user:pass@proxy:8080"),
)
Index ΒΆ
- Constants
- func Presets() []string
- type Client
- func (c *Client) Close()
- func (c *Client) Do(ctx context.Context, req *Request) (*Response, error)
- func (c *Client) Get(ctx context.Context, url string) (*Response, error)
- func (c *Client) GetWithHeaders(ctx context.Context, url string, headers map[string][]string) (*Response, error)
- func (c *Client) Post(ctx context.Context, url string, body io.Reader, contentType string) (*Response, error)
- func (c *Client) PostForm(ctx context.Context, url string, body []byte) (*Response, error)
- func (c *Client) PostJSON(ctx context.Context, url string, body []byte) (*Response, error)
- type LocalProxy
- func (p *LocalProxy) GetSession(sessionID string) *Session
- func (p *LocalProxy) IsRunning() bool
- func (p *LocalProxy) ListSessions() []string
- func (p *LocalProxy) Port() int
- func (p *LocalProxy) RegisterSession(sessionID string, session *Session) error
- func (p *LocalProxy) Stats() map[string]interface{}
- func (p *LocalProxy) Stop() error
- func (p *LocalProxy) UnregisterSession(sessionID string) *Session
- type LocalProxyConfig
- type LocalProxyOption
- func WithProxyMaxConnections(n int) LocalProxyOption
- func WithProxyPreset(preset string) LocalProxyOption
- func WithProxySessionCache(backend transport.SessionCacheBackend, errorCallback transport.ErrorCallback) LocalProxyOption
- func WithProxyTLSOnly() LocalProxyOption
- func WithProxyTimeout(d time.Duration) LocalProxyOption
- func WithProxyUpstream(tcpProxy, udpProxy string) LocalProxyOption
- type Option
- type RedirectInfo
- type Request
- type Response
- type Session
- func (s *Session) Close()
- func (s *Session) Do(ctx context.Context, req *Request) (*Response, error)
- func (s *Session) DoStream(ctx context.Context, req *Request) (*StreamResponse, error)
- func (s *Session) DoWithBody(ctx context.Context, req *Request, bodyReader io.Reader) (*Response, error)
- func (s *Session) Get(ctx context.Context, url string) (*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) (*StreamResponse, error)
- func (s *Session) GetStreamWithHeaders(ctx context.Context, url string, headers map[string][]string) (*StreamResponse, error)
- func (s *Session) GetTCPProxy() string
- func (s *Session) GetUDPProxy() string
- func (s *Session) Marshal() ([]byte, error)
- func (s *Session) Refresh()
- func (s *Session) RefreshWithProtocol(protocol string) error
- func (s *Session) Save(path string) error
- func (s *Session) SetCookie(name, value 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) Warmup(ctx context.Context, url string) error
- type SessionOption
- func WithConnectTo(requestHost, connectHost string) SessionOption
- func WithDisableECH() SessionOption
- func WithDisableSpeculativeTLS() SessionOption
- func WithECHFrom(domain string) SessionOption
- func WithForceHTTP1() SessionOption
- func WithForceHTTP2() SessionOption
- func WithForceHTTP3() SessionOption
- func WithInsecureSkipVerify() SessionOption
- func WithKeyLogFile(path string) SessionOption
- func WithLocalAddress(addr string) SessionOption
- func WithQuicIdleTimeout(d time.Duration) SessionOption
- func WithRedirects(follow bool, maxRedirects int) SessionOption
- func WithRetry(count int) SessionOption
- func WithRetryConfig(count int, waitMin, waitMax time.Duration, retryOnStatus []int) SessionOption
- func WithSessionCache(backend transport.SessionCacheBackend, errorCallback transport.ErrorCallback) SessionOption
- func WithSessionPreferIPv4() SessionOption
- func WithSessionProxy(proxyURL string) SessionOption
- func WithSessionTCPProxy(proxyURL string) SessionOption
- func WithSessionTimeout(d time.Duration) SessionOption
- func WithSessionUDPProxy(proxyURL string) SessionOption
- func WithSwitchProtocol(protocol string) SessionOption
- func WithTLSOnly() SessionOption
- func WithoutRedirects() SessionOption
- func WithoutRetry() SessionOption
- type StreamResponse
Constants ΒΆ
const ( // HeaderUpstreamProxy is the header name for per-request proxy override (HTTP only). // For HTTPS/CONNECT requests, use Proxy-Authorization header instead. HeaderUpstreamProxy = "X-Upstream-Proxy" // HeaderTLSOnly is the header name for per-request TLS-only mode override. // When set to "true", TLS fingerprinting is applied but preset HTTP headers are skipped. // When set to "false", normal mode is used (preset headers applied). // If not set, uses the proxy's global TLSOnly setting. HeaderTLSOnly = "X-HTTPCloak-TlsOnly" // HeaderSession is the header name for per-request session selection. // When set, the proxy uses the specified session ID to route the request. // Sessions must be registered via RegisterSession() before use. // Example: X-HTTPCloak-Session: my-session-id HeaderSession = "X-HTTPCloak-Session" // HeaderScheme upgrades HTTP requests to HTTPS with TLS fingerprinting. // When set to "https", LocalProxy converts http:// URLs to https:// and uses // Session.DoStream() with full fingerprinting. This allows standard HTTP proxy // clients to get HTTPS fingerprinting without using CONNECT tunneling. // Example: X-HTTPCloak-Scheme: https HeaderScheme = "X-HTTPCloak-Scheme" // ProxyAuthScheme is the authentication scheme for upstream proxy selection. // Format: "Proxy-Authorization: HTTPCloak http://user:pass@proxy:8080" // This works for both HTTP and HTTPS (CONNECT) requests since Proxy-Authorization // is sent with CONNECT requests by standard HTTP clients. ProxyAuthScheme = "HTTPCloak" )
Variables ΒΆ
This section is empty.
Functions ΒΆ
Types ΒΆ
type Client ΒΆ
type Client struct {
// contains filtered or unexported fields
}
Client is an HTTP client with browser fingerprint spoofing
func New ΒΆ
New creates a new HTTP client with the specified browser fingerprint.
Available presets:
- "chrome-latest" (recommended), "chrome-latest-windows", "chrome-latest-linux", "chrome-latest-macos"
- "chrome-144", "chrome-143", "chrome-141", "chrome-133"
- "firefox-latest", "firefox-133"
- "safari-latest", "safari-18"
- "ios-chrome-latest", "ios-safari-latest"
- "android-chrome-latest"
The -latest aliases always resolve to the newest version in the library.
Example:
client := httpcloak.New("chrome-latest")
defer client.Close()
func (*Client) GetWithHeaders ΒΆ
func (c *Client) GetWithHeaders(ctx context.Context, url string, headers map[string][]string) (*Response, error)
GetWithHeaders performs a GET request with custom headers
func (*Client) Post ΒΆ
func (c *Client) Post(ctx context.Context, url string, body io.Reader, contentType string) (*Response, error)
Post performs a POST request
type LocalProxy ΒΆ added in v1.5.8
type LocalProxy struct {
// contains filtered or unexported fields
}
LocalProxy is an HTTP proxy server that forwards requests through httpcloak sessions with TLS fingerprinting.
Architecture: - For HTTP requests: Forwards through httpcloak Session (fingerprinting applied) - For HTTPS (CONNECT): Tunnels TCP (client does TLS, fingerprinting via upstream proxy only)
Usage with C# HttpClient:
proxy := httpcloak.StartLocalProxy(8080, "chrome-143") defer proxy.Stop() // Configure HttpClient to use http://localhost:8080 as proxy
func StartLocalProxy ΒΆ added in v1.5.8
func StartLocalProxy(port int, opts ...LocalProxyOption) (*LocalProxy, error)
StartLocalProxy creates and starts a local HTTP proxy on the specified port. The proxy forwards requests through httpcloak sessions with TLS fingerprinting.
Example:
proxy, err := httpcloak.StartLocalProxy(8080, httpcloak.WithProxyPreset("chrome-143"))
if err != nil {
log.Fatal(err)
}
defer proxy.Stop()
fmt.Printf("Proxy running on port %d\n", proxy.Port())
func (*LocalProxy) GetSession ΒΆ added in v1.5.8
func (p *LocalProxy) GetSession(sessionID string) *Session
GetSession returns a registered session by ID. Returns nil if the session is not found.
func (*LocalProxy) IsRunning ΒΆ added in v1.5.8
func (p *LocalProxy) IsRunning() bool
IsRunning returns whether the proxy is running
func (*LocalProxy) ListSessions ΒΆ added in v1.5.8
func (p *LocalProxy) ListSessions() []string
ListSessions returns all registered session IDs.
func (*LocalProxy) Port ΒΆ added in v1.5.8
func (p *LocalProxy) Port() int
Port returns the port the proxy is listening on
func (*LocalProxy) RegisterSession ΒΆ added in v1.5.8
func (p *LocalProxy) RegisterSession(sessionID string, session *Session) error
RegisterSession registers a session with the given ID for per-request session selection. The session can then be selected via the X-HTTPCloak-Session header. Returns an error if a session with the same ID already exists.
Example:
session := httpcloak.NewSession("chrome-143", httpcloak.WithSessionProxy("..."))
proxy.RegisterSession("session-1", session)
// Client can now use: X-HTTPCloak-Session: session-1
func (*LocalProxy) Stats ΒΆ added in v1.5.8
func (p *LocalProxy) Stats() map[string]interface{}
Stats returns proxy statistics
func (*LocalProxy) Stop ΒΆ added in v1.5.8
func (p *LocalProxy) Stop() error
Stop stops the local proxy server gracefully
func (*LocalProxy) UnregisterSession ΒΆ added in v1.5.8
func (p *LocalProxy) UnregisterSession(sessionID string) *Session
UnregisterSession removes a session from the registry. The session is NOT closed - caller is responsible for closing it. Returns the session if found, nil otherwise.
type LocalProxyConfig ΒΆ added in v1.5.8
type LocalProxyConfig struct {
// Port to listen on (0 = auto-select)
Port int
// Browser fingerprint preset (default: chrome-143)
Preset string
// Request timeout
Timeout time.Duration
// Maximum concurrent connections
MaxConnections int
// Upstream proxy (optional)
TCPProxy string
UDPProxy string
// TLSOnly mode: only apply TLS fingerprinting, pass HTTP headers through unchanged.
// Useful when the client (e.g., Playwright) already provides authentic browser headers.
TLSOnly bool
// SessionCacheBackend is an optional distributed cache for TLS sessions.
// Enables session sharing across multiple LocalProxy instances.
SessionCacheBackend transport.SessionCacheBackend
// SessionCacheErrorCallback is called when backend operations fail.
SessionCacheErrorCallback transport.ErrorCallback
}
LocalProxyConfig holds configuration for the local proxy
type LocalProxyOption ΒΆ added in v1.5.8
type LocalProxyOption func(*LocalProxyConfig)
LocalProxyOption configures the local proxy
func WithProxyMaxConnections ΒΆ added in v1.5.8
func WithProxyMaxConnections(n int) LocalProxyOption
WithProxyMaxConnections sets the maximum concurrent connections
func WithProxyPreset ΒΆ added in v1.5.8
func WithProxyPreset(preset string) LocalProxyOption
WithProxyPreset sets the browser fingerprint preset
func WithProxySessionCache ΒΆ added in v1.5.8
func WithProxySessionCache(backend transport.SessionCacheBackend, errorCallback transport.ErrorCallback) LocalProxyOption
WithProxySessionCache sets a distributed TLS session cache backend for the proxy. This enables TLS session ticket sharing across multiple proxy instances.
func WithProxyTLSOnly ΒΆ added in v1.5.8
func WithProxyTLSOnly() LocalProxyOption
WithProxyTLSOnly enables TLS-only mode where only TLS fingerprinting is applied. HTTP headers from the client pass through unchanged - useful when using Playwright or other browsers that already provide authentic headers.
func WithProxyTimeout ΒΆ added in v1.5.8
func WithProxyTimeout(d time.Duration) LocalProxyOption
WithProxyTimeout sets the request timeout
func WithProxyUpstream ΒΆ added in v1.5.8
func WithProxyUpstream(tcpProxy, udpProxy string) LocalProxyOption
WithProxyUpstream sets upstream proxy URLs for the httpcloak session
type RedirectInfo ΒΆ added in v1.5.1
type RedirectInfo struct {
StatusCode int
URL string
Headers map[string][]string // Multi-value headers
}
RedirectInfo contains information about a redirect response
type Request ΒΆ
type Request struct {
Method string
URL string
Headers map[string][]string // Multi-value headers (matches http.Header)
Body io.Reader // Streaming body for uploads
Timeout time.Duration
// TLSOnly is a per-request override for TLS-only mode.
// When set to true, preset HTTP headers are NOT applied - only TLS fingerprinting is used.
// When nil, the session's TLSOnly setting is used.
// This is useful for LocalProxy where each request can have different TLS-only settings
// via the X-HTTPCloak-TlsOnly header.
TLSOnly *bool
}
Request represents an HTTP request
type Response ΒΆ
type Response struct {
StatusCode int
Headers map[string][]string // Multi-value headers (matches http.Header)
Body io.ReadCloser // Streaming body - call Close() when done
FinalURL string
Protocol string
History []*RedirectInfo
// contains filtered or unexported fields
}
Response represents an HTTP response
func (*Response) Bytes ΒΆ added in v1.5.3
Bytes reads and returns the entire response body. The body can only be read once unless cached.
func (*Response) GetHeader ΒΆ added in v1.5.3
GetHeader returns the first value for the given header key.
func (*Response) GetHeaders ΒΆ added in v1.5.3
GetHeaders returns all values for the given header key.
type Session ΒΆ
type Session struct {
// contains filtered or unexported fields
}
Session represents a persistent HTTP session with cookie management
func LoadSession ΒΆ added in v1.5.5
LoadSession loads a session from a file
func NewSession ΒΆ
func NewSession(preset string, opts ...SessionOption) *Session
NewSession creates a new persistent session with cookie management
func UnmarshalSession ΒΆ added in v1.5.5
UnmarshalSession loads a session from JSON bytes
func (*Session) DoStream ΒΆ added in v1.5.3
DoStream 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 Do() for redirect handling
func (*Session) DoWithBody ΒΆ added in v1.5.3
func (s *Session) DoWithBody(ctx context.Context, req *Request, bodyReader io.Reader) (*Response, error)
DoWithBody executes a request with an io.Reader as the body for streaming uploads
func (*Session) GetCookies ΒΆ
GetCookies returns all cookies stored in the session
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) GetStreamWithHeaders ΒΆ added in v1.5.3
func (s *Session) GetStreamWithHeaders(ctx context.Context, url string, headers map[string][]string) (*StreamResponse, error)
GetStreamWithHeaders performs a streaming GET request with custom headers
func (*Session) GetTCPProxy ΒΆ added in v1.5.8
GetTCPProxy returns the current TCP proxy URL
func (*Session) GetUDPProxy ΒΆ added in v1.5.8
GetUDPProxy returns the current UDP proxy URL
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) Save ΒΆ added in v1.5.5
Save exports session state (cookies, TLS sessions) to a file
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 Pass empty string to switch to direct connection
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 in distributed caches.
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 SessionOption ΒΆ
type SessionOption func(*sessionConfig)
SessionOption configures a session
func WithConnectTo ΒΆ added in v1.5.2
func WithConnectTo(requestHost, connectHost string) SessionOption
WithConnectTo sets a host mapping for domain fronting. Requests to requestHost will connect to connectHost instead. The TLS SNI and Host header will still use requestHost.
func WithDisableECH ΒΆ added in v1.6.0
func WithDisableECH() SessionOption
WithDisableECH disables ECH (Encrypted Client Hello) lookup for faster first request. ECH is an optional privacy feature that adds ~15-20ms to first connection. Disabling it has no security impact, only privacy implications.
func WithDisableSpeculativeTLS ΒΆ
func WithDisableSpeculativeTLS() SessionOption
WithDisableSpeculativeTLS disables the speculative TLS optimization for proxy connections. By default, httpcloak sends the CONNECT request and TLS ClientHello together to save one round-trip (~25% faster). Disable this if you experience issues with certain proxies.
func WithECHFrom ΒΆ added in v1.5.2
func WithECHFrom(domain string) SessionOption
WithECHFrom sets a domain to fetch ECH config from. Instead of fetching ECH from the target domain's DNS, the config will be fetched from this domain. Useful for Cloudflare domains - use "cloudflare-ech.com" to get ECH config that works for any Cloudflare-proxied domain.
func WithForceHTTP1 ΒΆ added in v1.0.1
func WithForceHTTP1() SessionOption
WithForceHTTP1 forces HTTP/1.1 protocol
func WithForceHTTP2 ΒΆ added in v1.0.1
func WithForceHTTP2() SessionOption
WithForceHTTP2 forces HTTP/2 protocol
func WithForceHTTP3 ΒΆ added in v1.1.1
func WithForceHTTP3() SessionOption
WithForceHTTP3 forces HTTP/3 protocol (QUIC)
func WithInsecureSkipVerify ΒΆ added in v1.0.1
func WithInsecureSkipVerify() SessionOption
WithInsecureSkipVerify disables SSL certificate verification
func WithKeyLogFile ΒΆ added in v1.6.0
func WithKeyLogFile(path string) SessionOption
WithKeyLogFile sets the path to write TLS key log for Wireshark decryption. This overrides the global SSLKEYLOGFILE environment variable for this session.
func WithLocalAddress ΒΆ added in v1.6.0
func WithLocalAddress(addr string) SessionOption
WithLocalAddress binds outgoing connections to a specific local IP address. Useful for IPv6 rotation when you have a large IPv6 prefix and want to rotate source IPs per session. Works with IP_FREEBIND on Linux. Supports both IPv4 and IPv6 addresses (e.g., "192.168.1.100" or "2001:db8::1").
func WithQuicIdleTimeout ΒΆ added in v1.5.8
func WithQuicIdleTimeout(d time.Duration) SessionOption
WithQuicIdleTimeout sets the QUIC connection idle timeout. Default is 30 seconds (matches Chrome). Connections are closed after this duration of inactivity. Set higher values if you need longer-lived HTTP/3 connections with gaps between requests.
func WithRedirects ΒΆ added in v1.0.1
func WithRedirects(follow bool, maxRedirects int) SessionOption
WithRedirects configures redirect behavior
func WithRetry ΒΆ added in v1.0.1
func WithRetry(count int) SessionOption
WithRetry enables retry with default settings
func WithRetryConfig ΒΆ added in v1.0.1
func WithRetryConfig(count int, waitMin, waitMax time.Duration, retryOnStatus []int) SessionOption
WithRetryConfig configures retry behavior
func WithSessionCache ΒΆ added in v1.5.8
func WithSessionCache(backend transport.SessionCacheBackend, errorCallback transport.ErrorCallback) SessionOption
WithSessionCache sets a distributed TLS session cache backend. This enables TLS session ticket sharing across multiple instances (e.g., via Redis). The errorCallback is optional and will be called when backend operations fail.
func WithSessionPreferIPv4 ΒΆ added in v1.1.2
func WithSessionPreferIPv4() SessionOption
WithSessionPreferIPv4 makes the session prefer IPv4 addresses over IPv6. Use this on networks with poor IPv6 connectivity.
func WithSessionProxy ΒΆ
func WithSessionProxy(proxyURL string) SessionOption
WithSessionProxy sets a proxy for the session
func WithSessionTCPProxy ΒΆ added in v1.5.3
func WithSessionTCPProxy(proxyURL string) SessionOption
WithSessionTCPProxy sets a proxy for TCP-based protocols (HTTP/1.1 and HTTP/2). Use this with WithSessionUDPProxy for split proxy configuration.
func WithSessionTimeout ΒΆ
func WithSessionTimeout(d time.Duration) SessionOption
WithSessionTimeout sets the timeout for session requests
func WithSessionUDPProxy ΒΆ added in v1.5.3
func WithSessionUDPProxy(proxyURL string) SessionOption
WithSessionUDPProxy sets a proxy for UDP-based protocols (HTTP/3 via MASQUE). Use this with WithSessionTCPProxy for split proxy configuration.
func WithSwitchProtocol ΒΆ added in v1.6.0
func WithSwitchProtocol(protocol string) SessionOption
WithSwitchProtocol sets the protocol to switch to after Refresh(). This enables warming up TLS tickets on one protocol (e.g. H3) then serving requests on another (e.g. H2) with TLS session resumption. Valid values: "h1", "h2", "h3".
func WithTLSOnly ΒΆ added in v1.5.8
func WithTLSOnly() SessionOption
WithTLSOnly enables TLS-only mode. In this mode, the preset's TLS fingerprint is used but its default HTTP headers are NOT applied. You must set all headers manually per-request. Useful when you need full control over HTTP headers while keeping the TLS fingerprint.
func WithoutRedirects ΒΆ added in v1.0.1
func WithoutRedirects() SessionOption
WithoutRedirects disables automatic redirect following
func WithoutRetry ΒΆ added in v1.0.5
func WithoutRetry() SessionOption
WithoutRetry explicitly disables retry
type StreamResponse ΒΆ added in v1.5.3
type StreamResponse struct {
StatusCode int
Headers map[string][]string
FinalURL string
Protocol string
ContentLength int64 // -1 if unknown (chunked encoding)
// contains filtered or unexported fields
}
StreamResponse represents a streaming HTTP response where the body is read incrementally. Use this for large file downloads.
func (*StreamResponse) Close ΒΆ added in v1.5.3
func (r *StreamResponse) Close() error
Close closes the response body - must be called when done
func (*StreamResponse) Read ΒΆ added in v1.5.3
func (r *StreamResponse) Read(p []byte) (n int, err error)
Read reads data from the response body
func (*StreamResponse) ReadAll ΒΆ added in v1.5.3
func (r *StreamResponse) ReadAll() ([]byte, error)
ReadAll reads the entire response body into memory This defeats the purpose of streaming but is useful for small responses
Directories
ΒΆ
| Path | Synopsis |
|---|---|
|
Package client provides an HTTP client with browser TLS/HTTP fingerprint spoofing.
|
Package client provides an HTTP client with browser TLS/HTTP fingerprint spoofing. |
|
examples
|
|
|
go-examples/basic
command
Example: Basic HTTP requests with httpcloak
|
Example: Basic HTTP requests with httpcloak |
|
go-examples/browserleaks-ech
command
Example: ECH + 0-RTT test with browserleaks using HTTP/3
|
Example: ECH + 0-RTT test with browserleaks using HTTP/3 |
|
go-examples/cloudflare
command
Example: Multiple requests to Cloudflare trace endpoint
|
Example: Multiple requests to Cloudflare trace endpoint |
|
go-examples/high-performance
command
Example: High-Performance Downloads
|
Example: High-Performance Downloads |
|
go-examples/new-features
command
|
|
|
go-examples/proxy-switching
command
|
|
|
go-examples/quic-idle-timeout
command
Example: QUIC Idle Timeout Configuration
|
Example: QUIC Idle Timeout Configuration |
|
go-examples/session
command
Example: Session management with cookies
|
Example: Session management with cookies |
|
go-examples/session-resumption
command
Example: Session Resumption (0-RTT)
|
Example: Session Resumption (0-RTT) |
|
go-examples/streaming
command
Example: Streaming Downloads with httpcloak
|
Example: Streaming Downloads with httpcloak |
|
go-examples/tls-only
command
Example: TLS-Only Mode with httpcloak
|
Example: TLS-Only Mode with httpcloak |
|
Package protocol defines the IPC message types for communication between the httpcloak daemon and language SDKs (Python, Node.js, etc.)
|
Package protocol defines the IPC message types for communication between the httpcloak daemon and language SDKs (Python, Node.js, etc.) |
|
keylog.go provides TLS key logging for traffic analysis with Wireshark.
|
keylog.go provides TLS key logging for traffic analysis with Wireshark. |