Fork me on GitHub

go-browserhttp

A pure-Go http.Client with a real Chrome TLS fingerprint (uTLS) โ€” bypass anti-bot 403s, no host web view.

Chrome TLS fingerprint (uTLS)no web viewmacOS ยท Linux ยท Windows
zsh
$ go get github.com/go-browserhttp/browserhttp@latest
$ go get github.com/go-browserhttp/gitcorsproxy@latest

go-browserhttp is a pure-Go, CGO_ENABLED=0 http.Client that presents a real Chrome TLS fingerprint via uTLS. Many sites 403 non-browser clients based largely on the TLS ClientHello; mimicking Chrome's ciphers, extensions and curves โ€” plus a browser User-Agent and a warmed cookie jar โ€” lets a plain Go client reach public endpoints with no host web view. Identical on macOS, Linux and Windows.

Quickstart

Construct a client and issue a request that looks like Chrome:

c := browserhttp.NewClient(30 * time.Second)
resp, err := c.Get("https://www.reddit.com/r/golang/hot.json")

Repositories

The single module in the org today, mirrored from the live GitHub repo.

browserhttp client

Pure-Go http.Client presenting a Chrome TLS fingerprint via uTLS. CGO=0.

CI Go Reference

gitcorsproxy proxy

A CORS reverse proxy for git smart-HTTP, so a Go/wasm git client in a browser can reach remotes that speak the protocol correctly and send no Access-Control-Allow-Origin โ€” GitHub, a bare Forgejo. It forwards the git bytes both ways and adds the headers, scoped to an explicit origin list. It stores nothing: the browser holds the user's token and sends it per request, the proxy relays it and forgets it. Standard library only, CGO=0, SSRF-guarded.

CI Go Reference

Pure Go with CGO_ENABLED=0 โ€” no host web view, no headless browser, no C toolchain. Extracted from go-news-reader/reader and shared by any fetcher that must look like a browser.