-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmitmproxy.go
59 lines (49 loc) · 1.3 KB
/
mitmproxy.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package main
import (
"log"
"github.com/lqqyt2423/go-mitmproxy/proxy"
)
type RequestResponseLog struct {
Request proxy.Request
Response proxy.Response
}
// MyAddon 继承了 proxy.BaseAddon
type MyAddon struct {
proxy.BaseAddon
}
// Request 方法处理 HTTP 请求
func (a *MyAddon) Request(f *proxy.Flow) {
// 创建并记录请求日志
logEntry := &RequestResponseLog{
Request: *f.Request,
}
// 使用 Flow ID 作为键,将请求日志存入 sync.Map
logs.Store(f.Id, logEntry)
// log.Printf("Request URL: %s", logEntry.Request.URL)
}
// Response 方法处理 HTTP 响应
func (a *MyAddon) Response(f *proxy.Flow) {
// 从 sync.Map 中获取对应的日志条目
value, ok := logs.Load(f.Id)
if ok {
logEntry := value.(*RequestResponseLog) // 类型断言
logEntry.Response = *f.Response
// 如果不需要再存储,可以删除该日志条目
// logs.Delete(f.Id)
} else {
// 如果找不到对应的请求日志,可以记录错误或处理异常情况
log.Printf("No matching request log found for response with ID: %s", f.Id)
}
}
func mitmproxy() {
opts := &proxy.Options{
Addr: ":9080",
StreamLargeBodies: 1024 * 1024 * 5,
}
p, err := proxy.NewProxy(opts)
if err != nil {
log.Fatal(err)
}
p.AddAddon(&MyAddon{}) // 添加 MyAddon
log.Fatal(p.Start())
}