-
Notifications
You must be signed in to change notification settings - Fork 8
/
har.go
360 lines (324 loc) · 12.5 KB
/
har.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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
package har
import (
"time"
)
/*
This file was originally built and released under the MIT license by CyrusBiotechnology here:
https://github.com/CyrusBiotechnology/go-har
*/
type Log struct {
Log HAR
}
type HAR struct {
/* This object represents the root of the exported data. This object MUST be
present and its name MUST be "log". The object contains the following
name/value pairs:
*/
// Required. Version number of the format.
Version string `json:"version"`
// Required. An object of type creator that contains the name and version
// information of the log creator application.
Creator Creator
// Optional. An object of type browser that contains the name and version
// information of the user agent.
Browser Browser
// Optional. An array of objects of type page, each representing one exported
// (tracked) page. Leave out this field if the application does not support
// grouping by pages.
Pages []Page `json:"pages,omitempty"`
// Required. An array of objects of type entry, each representing one
// exported (tracked) HTTP request.
Entries []Entry
// Optional. A comment provided by the user or the application. Sorting
// entries by startedDateTime (starting from the oldest) is preferred way how
// to export data since it can make importing faster. However the reader
// application should always make sure the array is sorted (if required for
// the import).
Comment string
}
type Creator struct {
/* This object contains information about the log creator application and
contains the following name/value pairs:
*/
// Required. The name of the application that created the log.
Name string
// Required. The version number of the application that created the log.
Version string
// Optional. A comment provided by the user or the application.
Comment string `json:"omitempty"`
}
type Browser struct {
/* This object contains information about the browser that created the log
and contains the following name/value pairs:
*/
// Required. The name of the browser that created the log.
Name string
// Required. The version number of the browser that created the log.
Version string
// Optional. A comment provided by the user or the browser.
Comment string
}
type Page struct {
/* There is one <page> object for every exported web page and one <entry>
object for every HTTP request. In case when an HTTP trace tool isn't able to
group requests by a page, the <pages> object is empty and individual
requests doesn't have a parent page.
*/
// Date and time stamp for the beginning of the page load
// (ISO 8601 YYYY-MM-DDThh:mm:ss.sTZD, e.g. 2009-07-24T19:20:30.45+01:00).
StartedDateTime string
// Unique identifier of a page within the . Entries use it to refer the parent page.
Id string
// Page title.
Title string
// Detailed timing info about page load.
PageTiming PageTiming
// (new in 1.2) A comment provided by the user or the application.
Comment string `json:"omitempty"`
}
type PageTiming struct {
/* This object describes timings for various events (states) fired during the
page load. All times are specified in milliseconds. If a time info is not
available appropriate field is set to -1.
*/
// Content of the page loaded. Number of milliseconds since page load started
// (page.startedDateTime). Use -1 if the timing does not apply to the current
// request.
// Depeding on the browser, onContentLoad property represents DOMContentLoad
// event or document.readyState == interactive.
OnContentLoad int
// Page is loaded (onLoad event fired). Number of milliseconds since page
// load started (page.startedDateTime). Use -1 if the timing does not apply
// to the current request.
OnLoad int
// (new in 1.2) A comment provided by the user or the application.
Comment string
}
type Entry struct {
// Unique, optional Reference to the parent page. Leave out this field if
// the application does not support grouping by pages.
Pageref string `json:"omitempty"`
// Date and time stamp of the request start
// (ISO 8601 YYYY-MM-DDThh:mm:ss.sTZD).
StartedDateTime time.Time `json:"startedDateTime"`
// Total elapsed time of the request in milliseconds. This is the sum of all
// timings available in the timings object (i.e. not including -1 values) .
Time float32
// Detailed info about the request.
Request Request `json:"request"`
// Detailed info about the response.
Response Response
// Info about cache usage.
Cache Cache
// Detailed timing info about request/response round trip.
PageTimings PageTimings
// optional (new in 1.2) IP address of the server that was connected
// (result of DNS resolution).
ServerIPAddress string `json:"omitempty"`
// optional (new in 1.2) Unique ID of the parent TCP/IP connection, can be
// the client port number. Note that a port number doesn't have to be unique
// identifier in cases where the port is shared for more connections. If the
// port isn't available for the application, any other unique connection ID
// can be used instead (e.g. connection index). Leave out this field if the
// application doesn't support this info.
Connection string `json:"omitempty"`
// (new in 1.2) A comment provided by the user or the application.
Comment string `json:"omitempty"`
}
type Request struct {
/* This object contains detailed info about performed request.
*/
// Request method (GET, POST, ...).
Method string `json:"method"`
// Absolute URL of the request (fragments are not included).
Url string `json:"url"`
// Request HTTP Version.
HttpVersion string
// List of cookie objects.
Cookies []Cookie
// List of header objects.
Headers []NVP
// List of query parameter objects.
QueryString []NVP
// Posted data.
PostData PostData
// Total number of bytes from the start of the HTTP request message until
// (and including) the double CRLF before the body. Set to -1 if the info
// is not available.
HeaderSize int
// Size of the request body (POST data payload) in bytes. Set to -1 if the
// info is not available.
BodySize int
// (new in 1.2) A comment provided by the user or the application.
Comment string
}
type Response struct {
/* This object contains detailed info about the response.
*/
// Response status.
Status int
// Response status description.
StatusText string
// Response HTTP Version.
HttpVersion string
// List of cookie objects.
Cookies []Cookie
// List of header objects.
Headers []NVP
// Details about the response body.
Content Content
// Redirection target URL from the Location response header.
RedirectURL string
// Total number of bytes from the start of the HTTP response message until
// (and including) the double CRLF before the body. Set to -1 if the info is
// not available.
// The size of received response-headers is computed only from headers that
// are really received from the server. Additional headers appended by the
// browser are not included in this number, but they appear in the list of
// header objects.
HeadersSize int
// Size of the received response body in bytes. Set to zero in case of
// responses coming from the cache (304). Set to -1 if the info is not
// available.
BodySize int
// optional (new in 1.2) A comment provided by the user or the application.
Comment string `json:"omitempty"`
}
type Cookie struct {
/* This object contains list of all cookies (used in <request> and <response>
objects).
*/
// The name of the cookie.
Name string
// The cookie value.
Value string
// optional The path pertaining to the cookie.
Path string `json:"omitempty"`
// optional The host of the cookie.
Domain string `json:"omitempty"`
// optional Cookie expiration time.
// (ISO 8601 YYYY-MM-DDThh:mm:ss.sTZD, e.g. 2009-07-24T19:20:30.123+02:00).
Expires string `json:"omitempty"`
// optional Set to true if the cookie is HTTP only, false otherwise.
HttpOnly string `json:"omitempty"`
// optional (new in 1.2) True if the cookie was transmitted over ssl, false
// otherwise.
Secure bool `json:"omitempty"`
// optional (new in 1.2) A comment provided by the user or the application.
Comment bool `json:"omitempty"`
}
type NVP struct {
// NVP is simply a name/value pair with a comment
Name string
Value string
Comment string `json:"omitempty"`
}
type PostData struct {
/* This object describes posted data, if any (embedded in <request> object).
*/
// Mime type of posted data.
MimeType string
// List of posted parameters (in case of URL encoded parameters).
Params []PostParam
// Plain text posted data
Text string
// optional (new in 1.2) A comment provided by the user or the
// application.
Comment string `json:"omitempty"`
}
type PostParam struct {
/* List of posted parameters, if any (embedded in <postData> object).
*/
// name of a posted parameter.
Name string
// optional value of a posted parameter or content of a posted file.
Value string `json:"omitempty"`
// optional name of a posted file.
FileName string `json:"omitempty"`
// optional content type of a posted file.
ContentType string `json:"omitempty"`
// optional (new in 1.2) A comment provided by the user or the application.
Comment string `json:"omitempty"`
}
type Content struct {
/* This object describes details about response content (embedded in
<response> object).
*/
// Length of the returned content in bytes. Should be equal to
// response.bodySize if there is no compression and bigger when the content
// has been compressed.
Size int
// optional Number of bytes saved. Leave out this field if the information
// is not available.
Compression int `json:"omitempty"`
// MIME type of the response text (value of the Content-Type response
// header). The charset attribute of the MIME type is included (if
// available).
MimeType string
// optional Response body sent from the server or loaded from the browser
// cache. This field is populated with textual content only. The text field
// is either HTTP decoded text or a encoded (e.g. "base64") representation of
// the response body. Leave out this field if the information is not
// available.
Text string `json:"omitempty"`
// optional (new in 1.2) Encoding used for response text field e.g
// "base64". Leave out this field if the text field is HTTP decoded
// (decompressed & unchunked), than trans-coded from its original character
// set into UTF-8.
Encoding string `json:"omitempty"`
// optional (new in 1.2) A comment provided by the user or the application.
Comment string `json:"omitempty"`
}
type Cache struct {
/* This objects contains info about a request coming from browser cache.
*/
// optional State of a cache entry before the request. Leave out this field
// if the information is not available.
BeforeRequest CacheObject `json:"omitempty"`
// optional State of a cache entry after the request. Leave out this field if
// the information is not available.
AfterRequest CacheObject `json:"omitempty"`
// optional (new in 1.2) A comment provided by the user or the application.
Comment string `json:"omitempty"`
}
type CacheObject struct {
/* Both beforeRequest and afterRequest object share the following structure.
*/
// optional - Expiration time of the cache entry.
Expires string `json:"omitempty"`
// The last time the cache entry was opened.
LastAccess string
// Etag
ETag string
// The number of times the cache entry has been opened.
HitCount int
// optional (new in 1.2) A comment provided by the user or the application.
Comment string `json:"omitempty"`
}
type PageTimings struct {
/* This object describes various phases within request-response round trip.
All times are specified in milliseconds.
*/
Blocked int `json:"omitempty"`
// optional - Time spent in a queue waiting for a network connection. Use -1
// if the timing does not apply to the current request.
Dns int `json:"omitempty"`
// optional - DNS resolution time. The time required to resolve a host name.
// Use -1 if the timing does not apply to the current request.
Connect int `json:"omitempty"`
// optional - Time required to create TCP connection. Use -1 if the timing
// does not apply to the current request.
Send int
// Time required to send HTTP request to the server.
Wait int
// Waiting for a response from the server.
Receive int
// Time required to read entire response from the server (or cache).
Ssl int `json:"omitempty"`
// optional (new in 1.2) - Time required for SSL/TLS negotiation. If this
// field is defined then the time is also included in the connect field (to
// ensure backward compatibility with HAR 1.1). Use -1 if the timing does not
// apply to the current request.
Comment string `json:"omitempty"`
// optional (new in 1.2) - A comment provided by the user or the application.
}