这是一个用于Go的HTTP客户端库,它解决了Web抓取和API自动化方面的一些现代挑战-特别是在机器人检测方面。
Surf是一个功能强大,功能丰富的Go HTTP客户端库,使处理HTTP请求变得直观和愉快。借助浏览器模拟、JA 3/JA 4指纹识别和全面的中间件支持等高级功能,Surf提供了现代Web交互所需的一切。
问题
今天,许多网站使用先进的机器人检测技术-例如:
- TLS指纹(JA 3/JA 4)
- HTTP/2设置和优先级帧检查
- 标头排序
- 多部分边界格式
- 操作系统和浏览器特定的标头
Surf通过支持以下功能,帮助您的请求融入真实的浏览器流量:
- 通过utls实现真实的JA 3/JA 4 TLS指纹
- HTTP/2 SETTINGS优先级帧匹配Chrome,Firefox等。
- 使用http.HeaderOrderKey进行准确的标头排序
- 操作系统/浏览器特定的用户代理和头文件
- WebKit/Gecko风格的多部分边界
技术特征
- 具有优先级的内置中间件系统
- 使用Singleton模式的连接池
- 可以通过net/http.Client转换为.Std()
- context.Context支持
- 针对Cloudflare、Akamai等进行测试
示例使用,模拟chrome:
client := surf.NewClient().
Builder().
Impersonate().Chrome().
Build()
resp := client.Get("https://api.example.com").Do()
浏览器模拟
- Chrome Firefox支持:精确模拟Chrome v131和Firefox v131浏览器指纹
- 平台多样性:模拟Windows、macOS、Linux、Android和iOS设备
- TLS指纹:完全JA 3/JA 4指纹定制,增强隐私
- 自动标题:正确的标题排序和浏览器特定的值
- WebKit Form Boundary:精确的多部分表单边界生成匹配真实的浏览器
- 自定义JA 3/JA 4:使用HelloID和HelloSpec配置精确的TLS指纹
- HTTP/3支持:通过QUIC的完整HTTP/3,具有浏览器特定的QUIC指纹识别
- JA4QUIC Fingerprinting:用于Chrome和Firefox的高级QUIC传输参数指纹
- HTTP/2 HTTP/3:完全支持HTTP/2,可自定义设置(SETTINGS帧,窗口大小,优先级)
- Ordered Headers:浏览器准确的头排序,完美的指纹规避
- 证书固定:自定义TLS证书验证
- DNS-over-TLS:通过DoT支持增强隐私
- 代理支持:HTTP、HTTPS和SOCKS 5代理配置,支持HTTP/3的UDP
- 连接池:使用单例模式的高效连接重用
- 自动重试:具有自定义状态代码的可配置重试逻辑
- 响应缓存:内置的体缓存用于重复访问
- 流媒体支持:高效处理大型响应和SSE
- 压缩:自动解压缩gzip、deflate、brotli和zstd响应
- Keep-Alive:具有可配置参数的持久连接
- 标准库兼容:转换为net/http.Client以进行第三方库集成
- 流畅的API:可链接的方法,实现优雅的代码
- 中间件系统:具有优先级支持的可扩展请求/响应/客户端中间件
- 类型安全:通过enetx/g支持泛型的强类型
- 调试模式:全面的请求/响应调试
- 错误处理:结果类型模式,用于更好的错误管理
- 上下文支持:完整的上下文。取消和超时的上下文集成