12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. "log"
  6. "net/http"
  7. "os"
  8. "github.com/elazarl/goproxy"
  9. )
  10. var f *os.File
  11. type Logger struct{}
  12. func (l *Logger) Printf(format string, v ...interface{}) {
  13. log.Printf(format, v...)
  14. }
  15. func initLog() {
  16. var err error
  17. f, err = os.OpenFile("log.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
  18. if err != nil {
  19. log.Fatal(err)
  20. }
  21. log.SetOutput(f)
  22. }
  23. func main() {
  24. initLog()
  25. defer func() {
  26. if f != nil {
  27. f.Close()
  28. }
  29. }()
  30. var port = flag.String("p", "7080", "代理端口")
  31. flag.Parse()
  32. log.Println(fmt.Sprintf("开始监听 %s:%s", "127.0.0.1", *port))
  33. proxy := goproxy.NewProxyHttpServer()
  34. proxy.Logger = new(Logger)
  35. // proxy.OnRequest(goproxy.ReqHostMatches(regexp.MustCompile(".*:443$"))).DoFunc(func(r *http.Request, ctx *goproxy.ProxyCtx) (*http.Request, *http.Response) {
  36. // log.Println("==========================")
  37. // log.Println(fmt.Sprintf("==========[%s] %s", r.Method, r.RequestURI))
  38. // return r, nil
  39. // })
  40. proxy.Verbose = true
  41. log.Fatal(http.ListenAndServe(":"+*port, proxy))
  42. }