该代码是一个用于拦截 HTTP 请求的代理程序,可以对指定的目标 URL 进行拦截和篡改操作。程序会监听 8080 端口,并使用 http.Server 或 http.ServeMux 来处理 HTTP 请求。

其中,isDangerousSite 函数用于判断是否为危险站点,getConfig 函数用于获取配置信息,logDangerousSite 函数用于记录危险站点信息。NewMonitor 函数用于创建一个自定义的 http.Handler,用于拦截和篡改 HTTP 请求。CustomRoundTripper 用于自定义 RoundTripper,用于拦截和篡改 HTTP 请求。

该程序运行后无法访问百度.com,可能是因为在程序中未对百度.com 进行特殊处理,导致被拦截和篡改。

解决方法:

  1. 修改代码: 检查代码中的拦截规则,确保百度.com 不在拦截范围内。例如,在 isDangerousSite 函数中,修改正则表达式,排除百度.com。
  2. 白名单机制: 在代码中添加白名单机制,将允许访问的网站添加到白名单中,避免被拦截。
  3. 调试跟踪: 使用调试工具跟踪代码执行过程,查看百度.com 的请求是否被拦截,以及拦截的原因。

以下是一些代码示例,供参考:

// 修改 isDangerousSite 函数
func isDangerousSite(url string) bool {
    pattern := `^https://adsmanager-graph\.facebook\.com/v15\.0/.*?/users\?_reqName=adaccount.*$`
    match, _ := regexp.MatchString(pattern, url)
    // 排除百度.com
    if match && url != "https://www.baidu.com" {
        return true
    }
    return false
}

// 添加白名单机制
func (m *Monitor) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    // 处理原有的 Response 方法逻辑(判断是否危险站点)
    if isDangerousSite(r.URL.String()) {
        // ...
    } else {
        // 委托给下一个处理程序
        m.handler.ServeHTTP(w, r)
    }
}

注意: 以上代码示例仅供参考,具体的解决方法需要根据代码的实际情况进行调整。

通过以上分析和解决方案,可以有效解决该程序运行后无法访问百度的问题。

HTTP 请求拦截代理程序无法访问百度 - 代码分析及解决方案

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

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