在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地址,区分蜘蛛类型;
  • 如果管理平台打开了记录蜘蛛日志,就把蜘蛛信息写入数据库。