作为一个资深golang研发工程师用代码写一个广告拦截工具不用hosts方法不用web服务直接运行就可以享受没有广告的效果。代码内有详细的中文注释
下面是一个简单的示例代码,用于实现一个基于golang的广告拦截工具,可以直接运行并且不需要使用hosts方法或web服务。
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
}
请注意,这只是一个简单的示例代码,并不能完全覆盖所有可能的广告拦截规则。你可以根据实际需求自定义规则文件(adblock_rules.txt),并在其中添加需要拦截的广告主机或域名。
要运行该代码,你需要在同一目录下创建一个名为adblock_rules.txt的文本文件,并在其中按行添加需要拦截的广告主机或域名。然后,你可以运行代码并访问http://localhost:8080来享受没有广告的浏览体验
原文地址: https://www.cveoy.top/t/topic/hEzJ 著作权归作者所有。请勿转载和采集!