forked from FladeX/homakov.github.com
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathreplay.html
102 lines (74 loc) · 2.61 KB
/
replay.html
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
<script>
var whitelist_domains = [];
function generate(){
var har = document.getElementById('har').value;
var entries = JSON.parse(har).log.entries;
var default_headers = false;
var whitelist_domains = whitelist.value == '' ? [] : whitelist.value.split(',');
var cache = {};
var out="";
for(var i = 0; i < entries.length;i++){
var request = entries[i].request;
var domain = request.url.split('/')[2];
if(whitelist_domains.length){
if(whitelist_domains.indexOf(domain) == -1)
continue;
}
if(!default_headers){
default_headers = headers_to_hash(request.headers,{});
out += "function get_headers(){return "+JSON.stringify(default_headers, undefined, 2)+"}\n\n";
}
var cache_key = request.method+" "+request.url;
if(cache[cache_key]){
continue;
}
cache[cache_key] = true;
var hdr = headers_to_hash(request.headers, default_headers)
hdr = hdr.length ? to_json(hdr) : '{}';
var body = '"'+((request.postData && request.postData.text) ? request.postData.text : '')+'"';
var expect = entries[i].response.status;
if(entries[i].response.redirectURL) expect += " "+entries[i].response.redirectURL;
var command = "run(\"" + request.method + "\",\"" + request.url + "\",\n"+
body+','+hdr+",\n\""+expect+ "\");\n";
if(race.checked){
command = "for(var i=0;i<5;i++){ "+command+"}\n"
}
out += command;
}
document.getElementById('out').innerHTML = out
}
function to_json(obj){
return JSON.stringify(obj, undefined, 2);
}
function headers_to_hash(headers, default_headers){
var back = {}
for(var i = 0;i<headers.length;i++){
if(default_headers[headers[i].name] && default_headers[headers[i].name] == headers[i].value){
continue;
}
back[headers[i].name] = headers[i].value;
}
return back;
}
</script>
<textarea placeholder="paste HAR here" raws=40 cols=80 onchange="generate();" id="har"></textarea><br>
<input onchange="generate();" size=40 placeholder="Comma separated whitelist domains" id="whitelist"><input type="checkbox" onchange="generate();" id="race"> Race condition
<pre>
var request = require('request');
function run(method, url, body, new_headers, expect){
var headers = get_headers();
for (var n in new_headers) { headers[n] = new_headers[n]; }
console.log("sent at "+process.hrtime().join(' '));
var opts = {
method:method,
url:url,
headers: headers,
body: body
}
request(opts, function(error, response, body) {
//response.statusCode
console.log(method, url, expect, " | ", response.statusCode, body.substr(1000))
})
}
</pre>
<pre id="out"></pre>