package main

import ( "bufio" "fmt" "net/http" "os" "strings" )

func main() { adBlocker := NewAdBlocker() adBlocker.LoadRulesFromFile("adblock_rules.txt")

fmt.Println("广告拦截工具已启动,开始拦截广告...")

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
	if adBlocker.IsAdBlocked(r.Host) {
		fmt.Printf("拦截广告请求: %s\n", r.Host)
		w.WriteHeader(http.StatusNotFound)
		return
	}

	fmt.Fprintf(w, "欢迎访问 %s\n", r.Host)
})

http.ListenAndServe(":8080", nil)

}

// AdBlocker 结构体用于存储广告拦截规则 type AdBlocker struct { rules map[string]bool }

// NewAdBlocker 创建一个新的广告拦截工具实例 func NewAdBlocker() *AdBlocker { return &AdBlocker{ rules: make(map[string]bool), } }

// LoadRulesFromFile 从文件中加载广告拦截规则 func (a *AdBlocker) LoadRulesFromFile(filename string) error { file, err := os.Open(filename) if err != nil { return err } defer file.Close()

scanner := bufio.NewScanner(file)
for scanner.Scan() {
	rule := scanner.Text()
	a.rules[rule] = true
}

if err := scanner.Err(); err != nil {
	return err
}

return nil

}

// IsAdBlocked 检查指定的主机是否被拦截 func (a *AdBlocker) IsAdBlocked(host string) bool { for rule := range a.rules { if strings.Contains(host, rule) { return true } } return false }


原文地址: https://www.cveoy.top/t/topic/pnDY 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录