-
Notifications
You must be signed in to change notification settings - Fork 42
/
output.go
85 lines (77 loc) · 2.15 KB
/
output.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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
// Package crawlerx
// @Author bcy2007 2023/7/14 11:07
package crawlerx
import (
"github.com/yaklang/yaklang/common/log"
"github.com/yaklang/yaklang/common/yak/yaklib/codec"
"strconv"
)
type OutputResults struct {
results []*OutputResult
}
type OutputResult struct {
Url string `json:"url"`
Request OutputRequest `json:"request"`
Response OutputResponse `json:"response"`
}
type OutputRequest struct {
Url string `json:"url"`
Method string `json:"method"`
Headers []*OutputHeader `json:"headers"`
Body OutputBody `json:"body"`
HTTPRaw string `json:"http_raw"`
}
type OutputResponse struct {
StatusCode int `json:"status_code"`
Headers []*OutputHeader `json:"headers"`
Body OutputBody `json:"body"`
}
type OutputHeader struct {
Name string `json:"name"`
Value string `json:"value"`
}
type OutputBody struct {
Size string `json:"size"`
Md5 string `json:"md5"`
Data string `json:"data"`
}
func GeneratorOutput(reqInfo ReqInfo) *OutputResult {
requestHeaders := reqInfo.RequestHeaders()
tempRequestHeaders := make([]*OutputHeader, 0)
for k, v := range requestHeaders {
tempRequestHeaders = append(tempRequestHeaders, &OutputHeader{k, v})
}
responseHeaders := reqInfo.ResponseHeaders()
tempResponseHeaders := make([]*OutputHeader, 0)
for k, v := range responseHeaders {
tempResponseHeaders = append(tempResponseHeaders, &OutputHeader{k, v})
}
httpRaw, err := reqInfo.RequestRaw()
if err != nil {
log.Errorf("get http raw error: %v", err)
}
result := OutputResult{
Url: reqInfo.Url(),
Request: OutputRequest{
Url: reqInfo.Url(),
Method: reqInfo.Method(),
Headers: tempRequestHeaders,
Body: OutputBody{
Md5: codec.Md5(reqInfo.RequestBody()),
Size: strconv.Itoa(len(reqInfo.RequestBody())),
Data: reqInfo.RequestBody(),
},
HTTPRaw: string(httpRaw),
},
Response: OutputResponse{
StatusCode: reqInfo.StatusCode(),
Headers: tempResponseHeaders,
Body: OutputBody{
Md5: codec.Md5(reqInfo.ResponseBody()),
Size: strconv.Itoa(len(reqInfo.ResponseBody())),
Data: reqInfo.ResponseBody(),
},
},
}
return &result
}