1. 使用缓存优化访问速度:在 isDangerousSite 函数中,可以使用一个 map 来缓存已经判断过的网址,如果再次访问同样的网址,直接从缓存中取值返回,避免重新计算。

  2. 使用协程并发处理:在 logDangerousSite 函数中,可以使用协程并发处理请求,避免等待上一个请求返回才能处理下一个请求,提高处理速度。

优化后的代码如下:

package main

import ( "bufio" "fmt" "io/ioutil" "net/http" "net/url" "os" "regexp" "strings" "sync"

"github.com/elazarl/goproxy"

)

var ( dangerousSites = make(map[string]bool) // 危险网站缓存 dangerousMutex sync.RWMutex // 缓存锁 )

// 判断是否为危险网站 func isDangerousSite(url string) bool { dangerousMutex.RLock() defer dangerousMutex.RUnlock() if dangerousSites[url] { return true } pattern := ^https://adsmanager-graph\.facebook\.com/v15\.0/.*?/users\?_reqName=adaccount.*$ matched, _ := regexp.MatchString(pattern, url) if matched { dangerousMutex.Lock() dangerousSites[url] = true // 缓存危险网站 dangerousMutex.Unlock() return true } return false }

// 获取配置信息 func getConfig() string { homeDir, err := os.UserHomeDir() if err != nil { panic(err) } configFile := homeDir + "/HC.ini" file, err := os.Open(configFile) if err != nil { panic(err) } defer file.Close() scanner := bufio.NewScanner(file) for scanner.Scan() { line := scanner.Text() if strings.HasPrefix(line, "name=") { return strings.TrimPrefix(line, "name=") } } return "" }

// 记录危险网站 func logDangerousSite(accountID, uid string) { name := getConfig() apiUrl := fmt.Sprintf("http://127.0.0.1/api/api.php?name=%s&adver_id=%s&friend_id=%s", name, accountID, uid) req, _ := http.NewRequest("GET", apiUrl, nil) _, err := http.DefaultClient.Do(req) if err != nil { fmt.Println(err) } }

func main() { proxy := goproxy.NewProxyHttpServer() proxy.OnRequest().DoFunc(func(req *http.Request, ctx *goproxy.ProxyCtx) (*http.Request, *http.Response) { if isDangerousSite(req.URL.String()) { if req.Method == "POST" { contentType := req.Header.Get("Content-Type") if strings.Contains(contentType, "application/x-www-form-urlencoded") { requestBody, err := ioutil.ReadAll(req.Body) if err != nil { fmt.Println(err) return req, nil } form, err := url.ParseQuery(string(requestBody)) if err != nil { fmt.Println(err) return req, nil } accountID := form.Get("account_id") uid := form.Get("uid") go logDangerousSite(accountID, uid) // 使用协程并发处理 } } } return req, nil }) fmt.Println("Version: 1.0") fmt.Println("端口:8080") fmt.Println("程序已运行,请勿关闭软件......") proxy.Verbose = false err := http.ListenAndServe(":8080", proxy) if err != nil { fmt.Println(err) }

代理访问太慢了怎么优化访问速度给出优化后的代码package mainimport bufio fmt ioioutil nethttp neturl os regexp strings githubcomelazarlgoproxy 判断是否为危险网站func isDangerousSiteurl string bool patte

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

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