source: other-projects/FileTransfer-WebSocketPair/Themes/themebuilder/bin/phantomjs-1.9.2-windows/examples/netsniff.js@ 31525

Last change on this file since 31525 was 31525, checked in by ak19, 7 years ago

Nathan provided more stuff: Themes folder contains Sencha's Themebuilder which generates GXT Themes. It includes the .theme and generated .jar files for the project theme.

File size: 4.1 KB
Line 
1if (!Date.prototype.toISOString) {
2 Date.prototype.toISOString = function () {
3 function pad(n) { return n < 10 ? '0' + n : n; }
4 function ms(n) { return n < 10 ? '00'+ n : n < 100 ? '0' + n : n }
5 return this.getFullYear() + '-' +
6 pad(this.getMonth() + 1) + '-' +
7 pad(this.getDate()) + 'T' +
8 pad(this.getHours()) + ':' +
9 pad(this.getMinutes()) + ':' +
10 pad(this.getSeconds()) + '.' +
11 ms(this.getMilliseconds()) + 'Z';
12 }
13}
14
15function createHAR(address, title, startTime, resources)
16{
17 var entries = [];
18
19 resources.forEach(function (resource) {
20 var request = resource.request,
21 startReply = resource.startReply,
22 endReply = resource.endReply;
23
24 if (!request || !startReply || !endReply) {
25 return;
26 }
27
28 // Exclude Data URI from HAR file because
29 // they aren't included in specification
30 if (request.url.match(/(^data:image\/.*)/i)) {
31 return;
32 }
33
34 entries.push({
35 startedDateTime: request.time.toISOString(),
36 time: endReply.time - request.time,
37 request: {
38 method: request.method,
39 url: request.url,
40 httpVersion: "HTTP/1.1",
41 cookies: [],
42 headers: request.headers,
43 queryString: [],
44 headersSize: -1,
45 bodySize: -1
46 },
47 response: {
48 status: endReply.status,
49 statusText: endReply.statusText,
50 httpVersion: "HTTP/1.1",
51 cookies: [],
52 headers: endReply.headers,
53 redirectURL: "",
54 headersSize: -1,
55 bodySize: startReply.bodySize,
56 content: {
57 size: startReply.bodySize,
58 mimeType: endReply.contentType
59 }
60 },
61 cache: {},
62 timings: {
63 blocked: 0,
64 dns: -1,
65 connect: -1,
66 send: 0,
67 wait: startReply.time - request.time,
68 receive: endReply.time - startReply.time,
69 ssl: -1
70 },
71 pageref: address
72 });
73 });
74
75 return {
76 log: {
77 version: '1.2',
78 creator: {
79 name: "PhantomJS",
80 version: phantom.version.major + '.' + phantom.version.minor +
81 '.' + phantom.version.patch
82 },
83 pages: [{
84 startedDateTime: startTime.toISOString(),
85 id: address,
86 title: title,
87 pageTimings: {
88 onLoad: page.endTime - page.startTime
89 }
90 }],
91 entries: entries
92 }
93 };
94}
95
96var page = require('webpage').create(),
97 system = require('system');
98
99if (system.args.length === 1) {
100 console.log('Usage: netsniff.js <some URL>');
101 phantom.exit(1);
102} else {
103
104 page.address = system.args[1];
105 page.resources = [];
106
107 page.onLoadStarted = function () {
108 page.startTime = new Date();
109 };
110
111 page.onResourceRequested = function (req) {
112 page.resources[req.id] = {
113 request: req,
114 startReply: null,
115 endReply: null
116 };
117 };
118
119 page.onResourceReceived = function (res) {
120 if (res.stage === 'start') {
121 page.resources[res.id].startReply = res;
122 }
123 if (res.stage === 'end') {
124 page.resources[res.id].endReply = res;
125 }
126 };
127
128 page.open(page.address, function (status) {
129 var har;
130 if (status !== 'success') {
131 console.log('FAIL to load the address');
132 phantom.exit(1);
133 } else {
134 page.endTime = new Date();
135 page.title = page.evaluate(function () {
136 return document.title;
137 });
138 har = createHAR(page.address, page.title, page.startTime, page.resources);
139 console.log(JSON.stringify(har, undefined, 4));
140 phantom.exit();
141 }
142 });
143}
Note: See TracBrowser for help on using the repository browser.