下面是一个简单的示例代码,用于实现一个基于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来享受没有广告的浏览体验

作为一个资深golang研发工程师用代码写一个广告拦截工具不用hosts方法不用web服务直接运行就可以享受没有广告的效果。代码内有详细的中文注释

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

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