Golang 本地网络请求拦截 - 广告和敏感词过滤 (无代理)

本文将展示如何使用 Golang 实现一个本地网络请求拦截器,用于拦截包含广告和敏感词的请求。该拦截器无需额外代理,直接在本地拦截请求。

代码示例:

package main

import (
	"fmt"
	"log"
	"net/http"
	"strings"
)

var blockedKeywords = []string{'广告', '敏感词'}

func main() {
	// 创建一个HTTP服务器并设置请求处理函数
	http.HandleFunc('/', handleRequest)

	// 启动服务器并监听端口
	err := http.ListenAndServe(":8080", nil)
	if err != nil {
		log.Fatal(err)
	}
}

func handleRequest(w http.ResponseWriter, r *http.Request) {
	// 获取请求的URL和方法
	url := r.URL.String()
	method := r.Method

	// 检查URL中是否包含被屏蔽的关键词
	for _, keyword := range blockedKeywords {
		if strings.Contains(url, keyword) {
			// 返回拦截信息
			w.WriteHeader(http.StatusForbidden)
			fmt.Fprintf(w, '请求已被拦截,包含敏感关键词: %s', keyword)
			return
		}
	}

	// 检查请求方法是否为POST,并检查POST请求的Body中是否包含被屏蔽的关键词
	if method == http.MethodPost {
		err := r.ParseForm()
		if err != nil {
			log.Println(err)
			w.WriteHeader(http.StatusInternalServerError)
			return
		}

		// 检查POST请求的Body中是否包含被屏蔽的关键词
		for keyword := range r.Form {
			for _, blockedKeyword := range blockedKeywords {
				if strings.Contains(keyword, blockedKeyword) {
					// 返回拦截信息
					w.WriteHeader(http.StatusForbidden)
					fmt.Fprintf(w, '请求已被拦截,包含敏感关键词: %s', blockedKeyword)
					return
				}
			}
		}
	}

	// 如果请求未被拦截,则继续处理请求
	// TODO: 处理正常请求的逻辑

	// 返回响应
	fmt.Fprintf(w, '请求已成功处理')
}

代码说明:

  1. blockedKeywords 变量: 用于存储被屏蔽的关键词列表,你可以根据实际需求进行修改。
  2. handleRequest 函数:
    • 获取请求的 URL 和方法。
    • 检查 URL 和 POST 请求的 Body 中是否包含被屏蔽的关键词。
    • 如果包含,则返回状态码 403 和拦截信息。
    • 否则,继续处理正常请求的逻辑(TODO)。
  3. 监听端口: 代码监听本地的 8080 端口,你可以根据实际情况进行修改。

接口说明:

该拦截器没有明确的 API 接口,它直接拦截网络请求。你可以通过修改 blockedKeywords 变量来控制拦截的关键词。

注意事项:

  • 该代码仅作为参考,实际的拦截逻辑和处理逻辑可能因需求而异。
  • 请确保代码中的端口与你的实际需求一致。
  • 为了更安全地拦截网络请求,建议使用代理模式,而不是直接拦截请求。

扩展阅读:


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

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