uautil
User-Agent 工具包 (uautil)
专为 Web 应用设计的 User-Agent 检测和机器人过滤工具包
User-Agent 工具包 (uautil)
uautil 是专为 Web 应用设计的 User-Agent 检测和机器人过滤工具包,帮助你轻松拦截恶意爬虫,同时保留合法搜索引擎访问。
🎯 设计目标
- 简单易用: 函数接口简洁明了,开箱即用
- 智能识别: 内置常见机器人特征,智能识别恶意爬虫
- 灵活配置: 支持自定义机器人特征和合法爬虫白名单
- 零依赖: 基于 Go 标准库实现,无外部依赖
- 性能优先: 高效的实现,适用于高并发场景
📦 安装
go get github.com/woodchen-ink/go-web-utils/uautil🚀 快速开始
基本用法
import "github.com/woodchen-ink/go-web-utils/uautil"
func handler(w http.ResponseWriter, r *http.Request) {
// 检测是否为机器人(拦截所有机器人)
if uautil.IsBot(r, false) {
http.Error(w, "Bot access denied", http.StatusForbidden)
return
}
// 正常处理请求
w.Write([]byte("Welcome!"))
}SEO 友好模式
// 允许合法搜索引擎爬虫(Google、Bing 等),但拦截恶意爬虫
if uautil.IsBot(r, true) {
http.Error(w, "Malicious bot detected", http.StatusForbidden)
return
}使用中间件
import "github.com/woodchen-ink/go-web-utils/uautil"
func main() {
// 创建你的处理器
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Welcome!"))
})
// 应用机器人拦截中间件
// allowLegitimate=true: 允许合法搜索引擎
middleware := uautil.BlockBotMiddleware(true, "Access denied")
protectedHandler := middleware(handler)
http.ListenAndServe(":8080", protectedHandler)
}仅允许浏览器访问
func main() {
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("欢迎使用浏览器访问"))
})
// 仅允许浏览器访问,拦截所有非浏览器请求
middleware := uautil.BrowserOnlyMiddleware("仅支持浏览器访问")
protectedHandler := middleware(handler)
http.ListenAndServe(":8080", protectedHandler)
}📚 功能列表
机器人检测
- IsBot - 检测请求是否来自机器人
- IsBotUserAgent - 直接检测 User-Agent 字符串
- BlockBotMiddleware - HTTP 中间件拦截机器人
- AddCustomBotPattern - 添加自定义机器人特征
浏览器检测
- IsBrowser - 检测请求是否来自真实浏览器
- IsBrowserUserAgent - 直接检测 User-Agent 字符串是否为浏览器
- BrowserOnlyMiddleware - 仅允许浏览器访问的中间件
- AddCustomBrowserPattern - 添加自定义浏览器特征
- GetBrowserPatterns - 获取当前浏览器特征列表
🤖 内置机器人特征
恶意机器人/工具
python-requests,python-urllibcurl,wgetscrapy,selenium,phantomjsnmap,sqlmap,nikto等扫描器- 其他常见爬虫工具
合法搜索引擎爬虫
- Google (
googlebot) - Bing (
bingbot) - Baidu (
baiduspider) - Yahoo (
slurp) - DuckDuckGo (
duckduckbot) - 社交媒体爬虫(Facebook, Twitter, LinkedIn 等)
🧪 测试
# 运行测试
go test github.com/woodchen-ink/go-web-utils/uautil
# 查看覆盖率
go test github.com/woodchen-ink/go-web-utils/uautil -cover💡 使用场景
机器人防护
- 保护 API: 防止恶意爬虫消耗服务器资源
- 防止内容盗取: 拦截自动化爬虫工具
- SEO 优化: 允许搜索引擎爬虫,拦截恶意机器人
- 流量控制: 减少机器人产生的无效流量
- 安全防护: 拦截扫描器和漏洞探测工具
浏览器检测
- Web 应用保护: 确保 Web 界面只能通过浏览器访问
- 内容防盗: 防止爬虫和自动化工具抓取内容
- 用户体验: 为浏览器用户提供特定功能,拦截非浏览器客户端
- 混合应用: 区分 API 请求和 Web 页面请求
- 统计分析: 准确统计真实浏览器用户访问量