在RichCMS的管理平台,可以使用【蜘蛛访问日志】,在管理平台的日志管理的蜘蛛日志处,可以看到曾经到访过的蜘蛛日志,包括访问地址,IP地址和时间等信息。此访问通过源码的方式,展示RichCMS系统蜘蛛日志的实现方式。
现在支持的蜘蛛类型:
var spiderTypeText = map[SpiderType]string{
SpiderTypeBaidu: "百度",
SpiderTypeGoogle: "google",
SpiderTypeShenma: "神马",
SpiderTypeByte: "字节",
SpiderTypeYisou: "一搜",
SpiderType360: "360",
SpiderTypeSogou: "搜狗",
SpiderTypeMSN: "MSN",
SpiderTypeYoudao: "有道",
SpiderTypeBing: "Bing",
SpiderSohu: "搜狐",
}
记录前台蜘蛛访问日志的middleware代码:
文件位于:/richcms/src/cms/middleware/front.go
// SpiderLog 记录前台页面访问的搜索引擎蛛蛛日志
func SpiderLog() gow.HandlerFunc {
return func(c *gow.Context) {
config := new(model.Config)
objConfig, ok := c.GetKey(constname.KeyConfig)
if ok {
config = objConfig.(*model.Config)
}
ip := c.GetIP()
hostName := utils.GetHostName(ip)
spiderType := enum.GetSpiderType(hostName)
//是搜索引擎蛛蛛时,在上下文中,写入
if spiderType != enum.SpiderUnknown {
c.SetKey(constname.SpiderType, spiderType)
}
if config.IsSpiderLog == enum.CommonStateEnable && spiderType != enum.SpiderUnknown {
spiderLog := &model.SpiderLog{
SpiderType: spiderType,
IP: ip,
Link: c.Request.RequestURI,
HostName: hostName,
UserAgent: c.UserAgent(),
Created: utils.NowUnixTime(),
}
err := spiderLog.Create()
if err != nil {
logx.Errorf("spiderLog.Create error: %v", err)
}
}
c.Next()
}
}
代码说明:
- SpiderLog()是一个gow框架的middleware函数,在所有前台页面的请求之前被调用。
- 根据请求的IP地址,区分蜘蛛类型;
- 如果管理平台打开了记录蜘蛛日志,就把蜘蛛信息写入数据库。