2011-06-17 11:05:19 +04:00
|
|
|
if not Date::toISOString
|
2012-12-07 00:29:37 +04:00
|
|
|
Date::toISOString = ->
|
|
|
|
pad = (n) ->
|
|
|
|
if n < 10 then '0' + n else n
|
|
|
|
ms = (n) ->
|
|
|
|
if n < 10 then '00' + n else (if n < 100 then '0' + n else n)
|
|
|
|
@getFullYear() + '-' +
|
|
|
|
pad(@getMonth() + 1) + '-' +
|
|
|
|
pad(@getDate()) + 'T' +
|
|
|
|
pad(@getHours()) + ':' +
|
|
|
|
pad(@getMinutes()) + ':' +
|
|
|
|
pad(@getSeconds()) + '.' +
|
|
|
|
ms(@getMilliseconds()) + 'Z'
|
2011-06-09 11:56:24 +04:00
|
|
|
|
|
|
|
createHAR = (address, title, startTime, resources) ->
|
2012-12-07 00:29:37 +04:00
|
|
|
entries = []
|
2011-06-09 11:56:24 +04:00
|
|
|
|
2012-12-07 00:29:37 +04:00
|
|
|
resources.forEach (resource) ->
|
|
|
|
request = resource.request
|
|
|
|
startReply = resource.startReply
|
|
|
|
endReply = resource.endReply
|
2011-06-09 11:56:24 +04:00
|
|
|
|
2012-12-07 00:29:37 +04:00
|
|
|
if not request or not startReply or not endReply
|
|
|
|
return
|
2011-06-09 11:56:24 +04:00
|
|
|
|
2012-12-07 00:29:37 +04:00
|
|
|
entries.push
|
|
|
|
startedDateTime: request.time.toISOString()
|
|
|
|
time: endReply.time - request.time
|
|
|
|
request:
|
|
|
|
method: request.method
|
|
|
|
url: request.url
|
|
|
|
httpVersion: 'HTTP/1.1'
|
|
|
|
cookies: []
|
|
|
|
headers: request.headers
|
|
|
|
queryString: []
|
|
|
|
headersSize: -1
|
|
|
|
bodySize: -1
|
2011-06-09 11:56:24 +04:00
|
|
|
|
2012-12-07 00:29:37 +04:00
|
|
|
response:
|
|
|
|
status: endReply.status
|
|
|
|
statusText: endReply.statusText
|
|
|
|
httpVersion: 'HTTP/1.1'
|
|
|
|
cookies: []
|
|
|
|
headers: endReply.headers
|
|
|
|
redirectURL: ''
|
|
|
|
headersSize: -1
|
|
|
|
bodySize: startReply.bodySize
|
|
|
|
content:
|
|
|
|
size: startReply.bodySize
|
|
|
|
mimeType: endReply.contentType
|
2011-06-09 11:56:24 +04:00
|
|
|
|
2012-12-07 00:29:37 +04:00
|
|
|
cache: {}
|
|
|
|
timings:
|
|
|
|
blocked: 0
|
|
|
|
dns: -1
|
|
|
|
connect: -1
|
|
|
|
send: 0
|
|
|
|
wait: startReply.time - request.time
|
|
|
|
receive: endReply.time - startReply.time
|
|
|
|
ssl: -1
|
|
|
|
pageref: address
|
2011-06-09 11:56:24 +04:00
|
|
|
|
2012-12-07 00:29:37 +04:00
|
|
|
log:
|
|
|
|
version: '1.2'
|
|
|
|
creator:
|
|
|
|
name: 'PhantomJS'
|
|
|
|
version: phantom.version.major + '.' + phantom.version.minor + '.' + phantom.version.patch
|
2011-06-09 11:56:24 +04:00
|
|
|
|
2012-12-07 00:29:37 +04:00
|
|
|
pages: [
|
|
|
|
startedDateTime: startTime.toISOString()
|
|
|
|
id: address
|
|
|
|
title: title
|
|
|
|
pageTimings:
|
|
|
|
onLoad: page.endTime - page.startTime
|
|
|
|
]
|
|
|
|
entries: entries
|
2011-06-09 11:56:24 +04:00
|
|
|
|
2011-09-13 00:17:54 +04:00
|
|
|
page = require('webpage').create()
|
2012-01-14 19:13:26 +04:00
|
|
|
system = require 'system'
|
2011-06-07 13:49:34 +04:00
|
|
|
|
2012-01-14 19:13:26 +04:00
|
|
|
if system.args.length is 1
|
2012-12-07 00:29:37 +04:00
|
|
|
console.log 'Usage: netsniff.coffee <some URL>'
|
|
|
|
phantom.exit 1
|
2011-06-07 13:49:34 +04:00
|
|
|
else
|
2012-12-07 00:29:37 +04:00
|
|
|
page.address = system.args[1]
|
|
|
|
page.resources = []
|
2011-06-07 13:49:34 +04:00
|
|
|
|
2012-12-07 00:29:37 +04:00
|
|
|
page.onLoadStarted = ->
|
|
|
|
page.startTime = new Date()
|
2011-06-07 13:49:34 +04:00
|
|
|
|
2012-12-07 00:29:37 +04:00
|
|
|
page.onResourceRequested = (req) ->
|
|
|
|
page.resources[req.id] =
|
|
|
|
request: req
|
|
|
|
startReply: null
|
|
|
|
endReply: null
|
2011-06-08 12:01:30 +04:00
|
|
|
|
2012-12-07 00:29:37 +04:00
|
|
|
page.onResourceReceived = (res) ->
|
|
|
|
if res.stage is 'start'
|
|
|
|
page.resources[res.id].startReply = res
|
|
|
|
if res.stage is 'end'
|
|
|
|
page.resources[res.id].endReply = res
|
2011-06-07 13:49:34 +04:00
|
|
|
|
2012-12-07 00:29:37 +04:00
|
|
|
page.open page.address, (status) ->
|
|
|
|
if status isnt 'success'
|
|
|
|
console.log 'FAIL to load the address'
|
|
|
|
else
|
|
|
|
page.endTime = new Date()
|
|
|
|
page.title = page.evaluate ->
|
|
|
|
document.title
|
2011-06-09 11:56:24 +04:00
|
|
|
|
2012-12-07 00:29:37 +04:00
|
|
|
har = createHAR page.address, page.title, page.startTime, page.resources
|
|
|
|
console.log JSON.stringify har, undefined, 4
|
|
|
|
phantom.exit()
|