Golang 广告拦截工具:无需 Hosts 文件,直接运行拦截广告
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 著作权归作者所有。请勿转载和采集!