surf 是自动化工作流领域的开源项目,由 enetx 开发,2025 年首次发布。
在全站 13,916 个收录项目中,它的 GitHub 星标数(1,836)位列前 30%,在自动化工作流分类中处于中上游。
项目保持着较活跃的维护节奏,最近一次代码更新于 2026-09-10。开源 Go 库,免费使用。
它主要面向的使用场景是:Go爬虫项目需要绕过Cloudflare等反爬检测。同类可对比的替代方案包括 curl-impersonate、cycletls。

让 Go 请求伪装成真实浏览器,绕过反爬检测
surf 是一个用 Go 编写的高级 HTTP 客户端,核心目标是让程序化请求在网络层看起来像真实浏览器。它支持模拟 Chrome 和 Firefox 的浏览器指纹,包括 JA3/JA4 TLS 指纹仿真、HTTP/3 与 QUIC 指纹、请求头顺序与默认值等,从而绕过常见反爬与风控检测。相比标准 net/http,surf 把浏览器行为抽象成可配置的客户端,开发者只需少量代码即可发起带浏览器特征的请求,适合网页抓取、自动化测试、API 探测等场景。项目还提供代理、Cookie、重定向、超时等常规能力,并针对 Cloudflare 等防护做了适配。作为纯 Go 实现,它便于集成到现有 Go 服务中,无需依赖外部浏览器进程,性能和部署成本更可控。
本站每日记录该项目 GitHub 星标变化,观测越久曲线越完整
—
1确认 Go 版本
先在终端查看当前 Go 版本,低于 1.27 需先升级,否则无法安装使用 surf。
go version2安装 surf 依赖
在已有的 Go 模块目录中执行 go get 拉取库,会自动写入 go.mod 依赖。
go get -u github.com/enetx/surf3创建带指纹客户端
用 Builder 链式构造客户端,HTTP3Settings().Grease() 开启 TLS 指纹混淆,再 Build 并 Unwrap 取回客户端。
client := surf.NewClient().
Builder().
HTTP3Settings().Grease().Set().
Build().
Unwrap()4调整 HTTP/2 参数
如需 HTTP/2 指纹更像浏览器,可设置头表大小、窗口大小、最大头列表等参数后再 Build。
client := surf.NewClient().
Builder().
HTTP2Settings().
HeaderTableSize(65536).
EnablePush(0).
InitialWindowSize(6291456).
MaxHeaderListSize(262144).
ConnectionFlow(15663105).
Set().
Build().
Unwrap()5配置代理
通过 Proxy 传入 HTTP/HTTPS/SOCKS 代理地址;README 示例为单代理写法,替换成自己的地址即可。
client := surf.NewClient().
Builder().
Proxy("http://proxy.example.com:8080").
Build().
Unwrap()6配置自动重试
Retry 第一个参数为最大重试次数,第二个参数为每次重试的等待时间,按需调整。
client := surf.NewClient().
Builder().
Retry(3, 2*time.Second).
Build().
Unwrap()| 配置项 | 必填 | 说明 | 示例 |
|---|---|---|---|
HTTP3Settings().Grease() | 否 | 开启 HTTP/3 指纹混淆,降低被识别概率 | HTTP3Settings().Grease().Set() |
HTTP2Settings().HeaderTableSize() | 否 | 设置 HTTP/2 头表大小,模拟浏览器指纹 | HeaderTableSize(65536) |
HTTP2Settings().InitialWindowSize() | 否 | 设置 HTTP/2 初始窗口大小 | InitialWindowSize(6291456) |
Proxy() | 否 | 指定 HTTP/HTTPS/SOCKS4/SOCKS5 代理地址 | http://proxy.example.com:8080 |
Retry() | 否 | 设置最大重试次数与重试间隔时间 | Retry(3, 2*time.Second) |
执行 go build ./... 编译无报错,程序能成功构造出 surf 客户端实例。
Q:Go 版本低于 1.27 能装吗?
A:README 要求 Go 1.27+,建议先升级 Go 工具链再执行 go get,否则可能编译失败或依赖无法解析。
Q:如何模拟 Chrome 或 Firefox 指纹?
A:surf 内置浏览器指纹模拟能力,支持 Chrome v152 与 Firefox v148,并可选择 Windows、macOS、Linux、Android、iOS 平台,具体调用方式请查阅仓库更多示例。
Q:代码片段不完整怎么用?
A:README 只给出 Builder 链式片段,你需要把它放进自己的 Go 模块和函数中,并自行补上后续发起请求的逻辑。
Q:能否自定义 JA3/JA4?
A:可以,通过 HelloID 与 HelloSpec 配置精确的 TLS 指纹,实现更细粒度的仿真与隐私控制。
Q:支持 HTTP/3 代理吗?
A:支持,代理配置包含 HTTP、HTTPS、SOCKS4、SOCKS5,并为 HTTP/3 提供 UDP 支持。
curl-impersonate、cycletls
surf 是自动化工作流领域的开源项目,由 enetx 开发,2025 年首次发布。
在全站 13,916 个收录项目中,它的 GitHub 星标数(1,836)位列前 30%,在自动化工作流分类中处于中上游。
项目保持着较活跃的维护节奏,最近一次代码更新于 2026-09-10。开源 Go 库,免费使用。
它主要面向的使用场景是:Go爬虫项目需要绕过Cloudflare等反爬检测。同类可对比的替代方案包括 curl-impersonate、cycletls。
n8n
开源
拖拽搭建自动化流程,轻松接入 AI 与 400+ 应用,搞定重复工作。
Fair-code workflow automation platform with native AI capabilities. Combine visual b···
EasyCLIProxyAPI
开源
图形界面一键配好 AI 代理,省去手写配置文件
A desktop GUI for CLIProxyAPI and a tool for automatically configuring popular AI ag···
feishu-docx
开源
让 AI 代理轻松读写飞书文档,双向转换 Markdown
Feishu/Lark Docs、Sheet、Bitable <-> Markdown | AI Agent-friendly knowledge base exp···
puppeteer
开源
用 JavaScript 轻松操控无头浏览器,搞定自动化测试与网页抓取。
JavaScript API for Chrome and Firefox