Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Merge changes from Google

Add option to drop http response bodies, miscellaneous re-
arrangements, update regression tests, and use UTC time.
Also, tcp.Direction is more robust to out-of-order packets.
  • Loading branch information...
commit c9c0fa85e420547ecfc8d521800e9d0c95095a64 1 parent 1f46484
Andrew Fleenor authored
0  __init__.py
View
No changes.
7 har.py
View
@@ -45,10 +45,11 @@ def HTTPRequestJsonRepr(self):
def HTTPResponseJsonRepr(self):
content = {
- 'size': len(self.body),
- 'compression': len(self.body) - len(self.raw_body),
+ 'size': self.body_length,
'mimeType': self.mimeType
}
+ if self.compression_amount is not None:
+ content['compression'] = self.compression_amount
if self.text:
if self.encoding:
content['text'] = self.text
@@ -61,7 +62,7 @@ def HTTPResponseJsonRepr(self):
'httpVersion': self.msg.version,
'cookies': [],
'headersSize': -1,
- 'bodySize': len(self.msg.body),
+ 'bodySize': self.raw_body_length,
'redirectURL': self.msg.headers['location'] if 'location' in self.msg.headers else '',
'headers': header_json_repr(self.msg.headers),
'content': content,
13 http/__init__.py
View
@@ -2,15 +2,4 @@
from request import Request
from response import Response
from flow import Flow
-
-class Error(Exception):
- '''
- Raised when HTTP cannot be parsed from the given data.
- '''
- pass
-
-class DecodingError(Error):
- '''
- Raised when encoded HTTP data cannot be decompressed/decoded/whatever.
- '''
- pass
+from common import Error
11 http/common.py
View
@@ -0,0 +1,11 @@
+class Error(Exception):
+ '''
+ Raised when HTTP cannot be parsed from the given data.
+ '''
+ pass
+
+class DecodingError(Error):
+ '''
+ Raised when encoded HTTP data cannot be decompressed/decoded/whatever.
+ '''
+ pass
5 http/flow.py
View
@@ -1,7 +1,8 @@
import logging
import dpkt
-import http
-from http import Request, Response
+import common as http
+from request import Request
+from response import Response
class Flow:
'''
3  http/request.py
View
@@ -1,7 +1,7 @@
import urlparse
#import dpkt.http this is buggy
import dpkt_http_replacement as dpkt_http
-import http
+import message as http
class Request(http.Message):
'''
@@ -21,4 +21,3 @@ def __init__(self, tcpdir, pointer):
self.fullurl = fullurl.geturl()
self.url, frag = urlparse.urldefrag(self.fullurl)
self.query = urlparse.parse_qs(uri.query, keep_blank_values=True)
-
54 http/response.py
View
@@ -2,9 +2,11 @@
import zlib
import cStringIO
import dpkt_http_replacement as dpkt_http
-import http
+import common as http
+import message
from mediatype import MediaType
import logging as log
+import settings
#from http import DecodingError # exception class from parent module
from base64 import encodestring as b64encode
@@ -15,7 +17,7 @@
except ImportError:
UnicodeDammit = None
-class Response(http.Message):
+class Response(message.Message):
'''
HTTP response.
Members:
@@ -26,19 +28,44 @@ class Response(http.Message):
* encoding: 'base64' if self.text is base64 encoded binary data, else None
* compression: string, compression type
* original_encoding: string, original text encoding/charset/whatever
+ * body_length: int, length of body, uncompressed if possible/applicable
+ * compression_amount: int or None, difference between lengths of
+ uncompressed data and raw data. None if no compression or we're not sure
'''
def __init__(self, tcpdir, pointer):
- http.Message.__init__(self, tcpdir, pointer, dpkt_http.Response)
- # uncompress body if necessary
- self.handle_compression()
+ message.Message.__init__(self, tcpdir, pointer, dpkt_http.Response)
# get mime type
if 'content-type' in self.msg.headers:
self.mediaType = MediaType(self.msg.headers['content-type'])
else:
self.mediaType = MediaType('application/x-unknown-content-type')
self.mimeType = self.mediaType.mimeType()
- # try to get out unicode
- self.handle_text()
+ # first guess at body size. handle_compression might
+ # modify it, but this has to be before clear_body
+ self.body_length = len(self.msg.body)
+ self.compression_amount = None
+ self.text = None
+ # handle body stuff
+ if settings.drop_bodies:
+ self.clear_body()
+ else:
+ # uncompress body if necessary
+ self.handle_compression()
+ # try to get out unicode
+ self.handle_text()
+
+ def clear_body(self):
+ '''
+ Clear response body to save memory
+
+ Sets to None the body attributes of self and self.msg, and
+ maybe tcpdir, too. Of course, they can't be GC'd if there
+ are any other references.
+ '''
+ self.body = self.raw_body = None
+ self.msg.body = None
+ self.tcpdir.clear_data() # clear stream data, not timing, etc
+
def handle_compression(self):
'''
Sets self.body to the http decoded response data. Sets compression to
@@ -75,6 +102,10 @@ def handle_compression(self):
elif encoding == 'identity':
# no compression
self.body = self.raw_body
+ elif 'sdch' in encoding:
+ # ignore sdch, a Google proposed modification to HTTP/1.1
+ # not in RFC 2616.
+ self.body = self.raw_body
else:
# I'm pretty sure the above are the only allowed encoding types
# see RFC 2616 sec 3.5 (http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.5)
@@ -83,6 +114,9 @@ def handle_compression(self):
# no compression
self.compression = 'identity'
self.body = self.raw_body
+ self.body_length = len(self.body)
+ # comp_amount is 0 when no compression, which may or may not be to spec
+ self.compression_amount = self.body_length - len(self.raw_body)
def handle_text(self):
'''
@@ -141,3 +175,9 @@ def handle_text(self):
# TODO: check with list that this is right
self.text = b64encode(self.body)
self.encoding = 'base64'
+
+ @property
+ def raw_body_length(self):
+ if self.compression_amount is None:
+ return self.body_length
+ return self.body_length - self.compression_amount
4 httpsession.py
View
@@ -34,8 +34,8 @@ def __init__(self, request, response):
self.response = response
self.pageref = None
self.ts_start = int(request.ts_connect*1000)
- self.startedDateTime = datetime.fromtimestamp(request.ts_connect)
- endedDateTime = datetime.fromtimestamp(response.ts_end)
+ self.startedDateTime = datetime.utcfromtimestamp(request.ts_connect)
+ endedDateTime = datetime.utcfromtimestamp(response.ts_end)
self.total_time = ms_from_timedelta(
endedDateTime - self.startedDateTime # plus connection time, someday
)
17 main.py
View
@@ -21,11 +21,17 @@
parser = optparse.OptionParser(
usage='usage: %prog inputfile outputfile'
)
-parser.add_option('--no-pages', action="store_false", dest="pages", default=True)
+parser.add_option('--no-pages', action='store_false',
+ dest='pages', default=True)
+parser.add_option('-d', '--drop-bodies', action='store_true',
+ dest='drop_bodies', default=False)
+parser.add_option('-r', '--resource-usage', action='store_true',
+ dest='resource_usage', default=False)
options, args = parser.parse_args()
# copy options to settings module
settings.process_pages = options.pages
+settings.drop_bodies = options.drop_bodies
# setup logs
logging.basicConfig(filename='pcap2har.log', level=logging.INFO)
@@ -52,6 +58,15 @@
logging.info("Flows=%d. HTTP pairs=%d" % (len(session.flows),len(session.entries)))
+def print_rusage():
+ rss = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
+ if sys.platform == 'darwin':
+ rss /= 1024 # Mac OSX returns rss in bytes, not KiB
+ print 'max_rss:', rss, 'KiB'
+
#write the HAR file
with open(outputfile, 'w') as f:
json.dump(session, f, cls=har.JsonReprEncoder, indent=2, encoding='utf8', sort_keys=True)
+
+if options.resource_usage:
+ print_rusage()
1  pcap.py
View
@@ -68,4 +68,3 @@ def ParsePcap(dispatcher, filename=None, reader=None):
log.warning('A packet in the pcap file was too short, '
'debug_pkt_count=%d' % debug_pkt_count)
errors.append((None, error))
-
3  settings.py
View
@@ -1 +1,2 @@
-process_pages = True
+process_pages = True
+drop_bodies = False # bodies of http responses
10 sortedcollection.py
View
@@ -127,7 +127,7 @@ def index(self, item):
if self._items[i] == item:
return i
i += 1
- raise ValueError('No item found with key equal to: %r' % (key,))
+ raise ValueError('No item found with key equal to: %r' % (key,))
def insert(self, item):
'Insert a new item. If equal keys are found, add to the left'
@@ -135,13 +135,13 @@ def insert(self, item):
i = bisect_left(self._keys, key)
self._keys.insert(i, key)
self._items.insert(i, item)
-
+
def remove(self, index):
'Remove the item at the passed index'
# lets IndexError fall out if indices are invalid
del self._items[index]
del self._keys[index]
-
+
def insert_right(self, item):
'Insert a new item. If equal keys are found, add to the right'
key = self._key(item)
@@ -191,7 +191,7 @@ def find_ge(self, key):
return self._items[i]
except IndexError:
raise ValueError('No item found with key at or above: %r' % (key,))
-
+
if __name__ == '__main__':
sd = SortedCollection('The quick Brown Fox jumped'.split(), key=str.lower)
@@ -230,7 +230,7 @@ def find_ge(self, key):
pass
else:
print('Oops, failed to notify of missing value')
-
+
import doctest
print(doctest.testmod())
31 tcp/__init__.py
View
@@ -10,34 +10,3 @@
from chunk import Chunk
from direction import Direction
from flowbuilder import FlowBuilder
-
-# util functions
-
-def detect_handshake(packets):
- '''
- Checks whether the passed list of tcp.Packet's represents a valid TCP
- handshake. Returns True or False.
- '''
- #from dpkt.tcp import * # get TH_* constants
- if len(packets) < 3:
- return False
- if len(packets) > 3:
- log.error('too many packets for detect_handshake')
- return False
- syn, synack, ack = packets
- fwd_seq = None
- rev_seq = None
- if syn.tcp.flags & dpkt.tcp.TH_SYN and not syn.tcp.flags & dpkt.tcp.TH_ACK:
- # have syn
- fwd_seq = syn.seq # start_seq is the seq field of the segment
- if (synack.flags & dpkt.tcp.TH_SYN and
- synack.flags & dpkt.tcp.TH_ACK and
- synack.ack == fwd_seq + 1):
- # have synack
- rev_seq = synack.seq
- if (ack.flags & dpkt.tcp.TH_ACK and
- ack.ack == rev_seq + 1 and
- ack.seq == fwd_seq + 1):
- # have ack
- return True
- return False
32 tcp/common.py
View
@@ -0,0 +1,32 @@
+import dpkt
+
+# util functions
+
+def detect_handshake(packets):
+ '''
+ Checks whether the passed list of tcp.Packet's represents a valid TCP
+ handshake. Returns True or False.
+ '''
+ #from dpkt.tcp import * # get TH_* constants
+ if len(packets) < 3:
+ return False
+ if len(packets) > 3:
+ log.error('too many packets for detect_handshake')
+ return False
+ syn, synack, ack = packets
+ fwd_seq = None
+ rev_seq = None
+ if syn.tcp.flags & dpkt.tcp.TH_SYN and not syn.tcp.flags & dpkt.tcp.TH_ACK:
+ # have syn
+ fwd_seq = syn.seq # start_seq is the seq field of the segment
+ if (synack.flags & dpkt.tcp.TH_SYN and
+ synack.flags & dpkt.tcp.TH_ACK and
+ synack.ack == fwd_seq + 1):
+ # have synack
+ rev_seq = synack.seq
+ if (ack.flags & dpkt.tcp.TH_ACK and
+ ack.ack == rev_seq + 1 and
+ ack.seq == fwd_seq + 1):
+ # have ack
+ return True
+ return False
29 tcp/direction.py
View
@@ -1,6 +1,7 @@
from sortedcollection import SortedCollection
-import tcp
+import chunk as tcp
from operator import itemgetter, attrgetter
+import logging as log
class Direction:
'''
@@ -8,12 +9,13 @@ class Direction:
Members:
* finished = bool. Indicates whether more packets should be expected.
- * chunks = [tcp.Chunk], sorted by seq_start
+ * chunks = [tcp.Chunk] or None, sorted by seq_start. None iff data
+ has been cleared.
* flow = tcp.Flow, the flow to which the direction belongs
* arrival_data = SortedCollection([(seq_num, pkt)])
* final_arrival_data = SortedCollection([(seq_num, ts)])
* final_data_chunk = Chunk or None, the chunk that contains the final data,
- only after seq_start is valid
+ only after seq_start is valid and before clear_data
* final_arrival_pointer = the end sequence number of data that has
completely arrived
'''
@@ -43,6 +45,9 @@ def add(self, pkt):
'''
if self.finished:
raise RuntimeError('tried to add packets to a finished tcp.Direction')
+ if self.chunks is None:
+ raise RuntimeError('Tried to add packet to a tcp.Direction'
+ 'that has been cleared')
# discard packets with no payload. we don't care about them here
if pkt.data == '':
return
@@ -78,6 +83,8 @@ def data(self):
'''
returns the TCP data, as far as it has been determined.
'''
+ if self.chunks is None:
+ return None
if self.final_data_chunk:
return self.final_data_chunk.data
else:
@@ -85,6 +92,20 @@ def data(self):
return '' # no data was ever added
else:
return None # just don't know at all
+
+ def clear_data(self):
+ '''
+ Drop data to save memory
+ '''
+ # we need to make sure we've grabbed any timing info we can
+ if not self.finished:
+ log.warn('tried to clear data on an unfinished tcp.Direction')
+ # clear the list, to make sure all chunks are orphaned to make it
+ # easier for GC. hopefully.
+ del self.chunks[:]
+ self.chunks = None
+ self.final_data_chunk = None
+
@property
def seq_start(self):
'''
@@ -102,6 +123,8 @@ def seq_start(self):
if self.chunks:
return self.chunks[0].seq_start
else:
+ # this will also occur when a Direction with no handshake
+ # has been cleared.
log.warning('getting seq_start from finished tcp.Direction '
'with no handshake and no data')
return None
26 tcp/flow.py
View
@@ -1,5 +1,5 @@
-from tcp.direction import Direction
-import tcp
+from direction import Direction
+import common as tcp
import seq # hopefully no name collisions
from sortedcollection import SortedCollection
@@ -30,13 +30,21 @@ def add(self, pkt):
called for every packet coming in, instead of iterating through
a list
'''
- # make sure packet is in time order
- if len(self.packets): # if we have received packets before...
- if self.packets[-1].ts > pkt.ts: # if this one is out of order...
- # error out
- raise ValueError("packet added to tcp.Flow out of "
- "chronological order")
- self.packets.append(pkt)
+ # maintain an invariant that packets are ordered by ts;
+ # perform ordered insertion (as in insertion sort) if they're
+ # not in order because sometimes libpcap writes packets out of
+ # order.
+
+ # the correct position for pkt is found by looping i from
+ # len(self.packets) descending back to 0 (inclusive);
+ # normally, this loop will only run for one iteration.
+ for i in xrange(len(self.packets), -1, -1):
+ # pkt is at the correct position if it is at the
+ # beginning, or if it is >= the packet at its previous
+ # position.
+ if i == 0 or self.packets[i - 1].ts <= pkt.ts: break
+ self.packets.insert(i, pkt)
+
# look out for handshake
# add it to the appropriate direction, if we've found or given up on
# finding handshake
2  tcp/flowbuilder.py
View
@@ -1,4 +1,4 @@
-import tcp
+import flow as tcp
import logging as log
class FlowBuilder:
62 tests/fhs.pcap.har
View
@@ -54,7 +54,7 @@
}
],
"headersSize": -1,
- "httpVersion": "1.1",
+ "httpVersion": "HTTP/1.1",
"method": "GET",
"queryString": [],
"url": "http://andrewfleenor.users.sourceforge.net/fhs/fhs.xml"
@@ -116,7 +116,7 @@
"status": 200,
"statusText": "OK"
},
- "startedDateTime": "2010-07-27T20:02:59.541812Z",
+ "startedDateTime": "2010-07-28T03:02:59.541812Z",
"time": 470,
"timings": {
"blocked": -1,
@@ -176,7 +176,7 @@
}
],
"headersSize": -1,
- "httpVersion": "1.1",
+ "httpVersion": "HTTP/1.1",
"method": "GET",
"queryString": [],
"url": "http://andrewfleenor.users.sourceforge.net/fhs/fhs.xsl"
@@ -238,7 +238,7 @@
"status": 200,
"statusText": "OK"
},
- "startedDateTime": "2010-07-27T20:02:59.827234Z",
+ "startedDateTime": "2010-07-28T03:02:59.827234Z",
"time": 208,
"timings": {
"blocked": -1,
@@ -298,7 +298,7 @@
}
],
"headersSize": -1,
- "httpVersion": "1.1",
+ "httpVersion": "HTTP/1.1",
"method": "GET",
"queryString": [],
"url": "http://andrewfleenor.users.sourceforge.net/fhs/fhs.css"
@@ -360,7 +360,7 @@
"status": 200,
"statusText": "OK"
},
- "startedDateTime": "2010-07-27T20:03:00.054787Z",
+ "startedDateTime": "2010-07-28T03:03:00.054787Z",
"time": 90,
"timings": {
"blocked": -1,
@@ -420,7 +420,7 @@
}
],
"headersSize": -1,
- "httpVersion": "1.1",
+ "httpVersion": "HTTP/1.1",
"method": "GET",
"queryString": [],
"url": "http://andrewfleenor.users.sourceforge.net/fhs/fhs.js"
@@ -429,8 +429,10 @@
"bodySize": 712,
"content": {
"compression": 1062,
+ "encoding": "base64",
"mimeType": "application/x-javascript",
- "size": 1774
+ "size": 1774,
+ "text": "DQovL29uZSBmdW5jdGlvbiB0byBleHBhbmQgb3IgY2xvc2UgYSBkaXJlY3RvcnkgZW50cnkNCmZ1\nbmN0aW9uIHRvZ2dsZURpckV4cGFuc2lvbihiYXNlX2lkKXsNCiAgICB0b2dnbGVJbWFnZShiYXNl\nX2lkICsgJzppbWcnLCAnZGlyLWNsb3NlZC5wbmcnLCAnZGlyLW9wZW4ucG5nJykNCiAgICB0b2dn\nbGVEaXNwbGF5KGJhc2VfaWQgKyAnOmlubmVyJywgJ2Jsb2NrJykNCn0NCg0KLy9kaXR0bywgYnV0\nIGZvciBwbGFpbiBmaWxlcw0KZnVuY3Rpb24gdG9nZ2xlRmlsZUV4cGFuc2lvbihiYXNlX2lkKXsN\nCiAgICB0b2dnbGVJbWFnZShiYXNlX2lkICsgJzppbWcnLCAnZmlsZS1jbG9zZWQucG5nJywgJ2Zp\nbGUtb3Blbi5wbmcnKQ0KICAgIHRvZ2dsZURpc3BsYXkoYmFzZV9pZCArICc6aW5uZXInLCAnYmxv\nY2snKQ0KfQ0KDQovL3N3aXRjaGVzIHRoZSBzcmMgb2YgYW4gaW1hZ2UgYmV0d2VlbiB0d28gYWx0\nZXJuYXRpdmVzDQpmdW5jdGlvbiB0b2dnbGVJbWFnZShpbWdfaWQsIGltZzEsIGltZzIpew0KICAg\nIGltZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGltZ19pZCkNCiAgICBpZihpbWcuc3JjLmVu\nZHNXaXRoKGltZzEpKXsNCiAgICAgICAgaW1nLnNyYyA9IGltZzIgDQogICAgfSBlbHNlIGlmKGlt\nZy5zcmMuZW5kc1dpdGgoaW1nMikpew0KICAgICAgICBpbWcuc3JjID0gaW1nMQ0KICAgIH0gZWxz\nZSB7DQogICAgICAgIHRocm93ICd0b2dnbGVJbWFnZTogaW52YWxpZCBpbWFnZSBzcmMoXCcnICsg\naW1nLnNyYyArICdcJywgbmVpdGhlciBcJycgKyBpbWcxICsgJ1wnIG5vciBcJycgKyBpbWcyICsg\nJ1wnJw0KICAgIH0NCn0NCg0KLy9zaW1wbGUgZnVuY3Rpb24gdGhhdCBleHBhbmRzIG9yIGNvbGxh\ncHNlcyBhbnkgZWxlbWVudA0KZnVuY3Rpb24gdG9nZ2xlRGlzcGxheShlbGVtZW50X2lkLCBkaXNw\nKXsNCiAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudF9pZCkNCiAg\nICBpZighZWxlbWVudCl7IC8vaWYgdGhlIGVsZW1lbnQgd2FzIG5vdCBmb3VuZA0KICAgICAgICB0\naHJvdyAoInRvZ2dsZURpc3BsYXk6IGZhaWxlZCB0byBmaW5kIGlkOiAnIiArIGVsZW1lbnRfaWQg\nKyAiJyIpDQogICAgfSBlbHNlIGlmKGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9PSAnbm9uZScpew0K\nICAgICAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBkaXNwDQogICAgfSBlbHNlIHsgICAvL3Ro\naXMgaW5jbHVkZXMgZWxlbWVudHMgd2l0aCBubyBleHBsaWNpdCBkaXNwbGF5IHByb3AsIHdoaWNo\nIG1lYW5zIHlvdSBjYW4gc2VlIHRoZW0NCiAgICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0g\nJ25vbmUnDQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBoaWRlKGVsZW1lbnQpew0KICAgIGVsZW1lbnQu\nc3R5bGUuZGlzcGxheSA9ICdub25lJw0KfQ0KDQpmdW5jdGlvbiBzaG93KGVsZW1lbnQsIHByb3Ap\new0KICAgIGlmKHByb3AgPT0gJ2Jsb2NrJyB8fCBwcm9wID09ICdpbmxpbmUnKXsNCiAgICAgICAg\nZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gcHJvcA0KICAgIH0gZWxzZSB7DQogICAgICAgIHRocm93\nICdmdW5jdGlvbiBzaG93OiBpbnZhbGlkIHBhcmFtZXRlcicNCiAgICB9DQp9DQoNClN0cmluZy5w\ncm90b3R5cGUuZW5kc1dpdGggPSBmdW5jdGlvbihzdHIpDQp7DQogICAgdmFyIGxhc3RJbmRleCA9\nIHRoaXMubGFzdEluZGV4T2Yoc3RyKTsNCiAgICByZXR1cm4gdGhpcy5sZW5ndGggPj0gc3RyLmxl\nbmd0aCAmJiB0aGlzLmxhc3RJbmRleE9mKHN0cikgKyBzdHIubGVuZ3RoID09IHRoaXMubGVuZ3Ro\nDQp9DQoNCg==\n"
},
"cookies": [],
"headers": [
@@ -481,7 +483,7 @@
"status": 200,
"statusText": "OK"
},
- "startedDateTime": "2010-07-27T20:03:00.057428Z",
+ "startedDateTime": "2010-07-28T03:03:00.057428Z",
"time": 105,
"timings": {
"blocked": -1,
@@ -541,7 +543,7 @@
}
],
"headersSize": -1,
- "httpVersion": "1.1",
+ "httpVersion": "HTTP/1.1",
"method": "GET",
"queryString": [],
"url": "http://andrewfleenor.users.sourceforge.net/fhs/dir-closed.png"
@@ -550,8 +552,10 @@
"bodySize": 251,
"content": {
"compression": 0,
+ "encoding": "base64",
"mimeType": "image/png",
- "size": 251
+ "size": 251,
+ "text": "iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAIAAAC0tAIdAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAL\nEwAACxMBAJqcGAAAAAd0SU1FB9oEDRUoHCsqeIoAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRo\nIEdJTVBXgQ4XAAAAaElEQVQoz5WSwQ3AMAgDDQuE/aeECeiDKqqcNC33QooJtkAyEwCAiMALY4wq\nJDNJZ2ZVuDv1KH0zpVQXejBARISig5S5dShxZ6Ao54aek776j5nSCEkpLr02ncwb+GSz+efoNY+0\nbvACVp8376DuttAAAAAASUVORK5CYII=\n"
},
"cookies": [],
"headers": [
@@ -602,7 +606,7 @@
"status": 200,
"statusText": "OK"
},
- "startedDateTime": "2010-07-27T20:03:00.063398Z",
+ "startedDateTime": "2010-07-28T03:03:00.063398Z",
"time": 198,
"timings": {
"blocked": -1,
@@ -662,7 +666,7 @@
}
],
"headersSize": -1,
- "httpVersion": "1.1",
+ "httpVersion": "HTTP/1.1",
"method": "GET",
"queryString": [],
"url": "http://andrewfleenor.users.sourceforge.net/fhs/file-closed.png"
@@ -671,8 +675,10 @@
"bodySize": 252,
"content": {
"compression": 0,
+ "encoding": "base64",
"mimeType": "image/png",
- "size": 252
+ "size": 252,
+ "text": "iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAIAAAC0tAIdAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAL\nEwAACxMBAJqcGAAAAAd0SU1FB9oEDRUuJ8x7NigAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRo\nIEdJTVBXgQ4XAAAAaUlEQVQoz42SSw7AIAgFH8Q93P+UeAK6aEMTVISVkhk/ALk7AABzThxCRN4F\nuXvBJYdjo6pXgcws0ZFZg9eUqp7u4dMxW4frhyaHO9UIoUXHv0eTu9DbOo4m99EiEp0vuNz5Gv2n\nqj+DD5h8LXdBt4lUAAAAAElFTkSuQmCC\n"
},
"cookies": [],
"headers": [
@@ -723,7 +729,7 @@
"status": 200,
"statusText": "OK"
},
- "startedDateTime": "2010-07-27T20:03:00.066760Z",
+ "startedDateTime": "2010-07-28T03:03:00.066760Z",
"time": 274,
"timings": {
"blocked": -1,
@@ -783,7 +789,7 @@
}
],
"headersSize": -1,
- "httpVersion": "1.1",
+ "httpVersion": "HTTP/1.1",
"method": "GET",
"queryString": [],
"url": "http://andrewfleenor.users.sourceforge.net/fhs/file-empty.png"
@@ -792,8 +798,10 @@
"bodySize": 273,
"content": {
"compression": 0,
+ "encoding": "base64",
"mimeType": "image/png",
- "size": 273
+ "size": 273,
+ "text": "iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAIAAAC0tAIdAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A\n/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oFHBQwCGfsR9MAAAAZdEVYdENv\nbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAbElEQVQoz5WSuxEAIQgFH4w55dh/SDdaARd4\nQ6CiSCTOrh+AzAwAgN47ghCRsSAzO3CTw56o6lWg1tpE11ojmtctVY3u4eiYrcPnh04OZ6rhQor2\nf5ckd6G3dSxJ7qdFxDt/4Ebn3+aEnmbwA+7INyTfz+Z3AAAAAElFTkSuQmCC\n"
},
"cookies": [],
"headers": [
@@ -844,7 +852,7 @@
"status": 200,
"statusText": "OK"
},
- "startedDateTime": "2010-07-27T20:03:00.080303Z",
+ "startedDateTime": "2010-07-28T03:03:00.080303Z",
"time": 280,
"timings": {
"blocked": -1,
@@ -904,7 +912,7 @@
}
],
"headersSize": -1,
- "httpVersion": "1.1",
+ "httpVersion": "HTTP/1.1",
"method": "GET",
"queryString": [],
"url": "http://andrewfleenor.users.sourceforge.net/fhs/dir-empty.png"
@@ -913,8 +921,10 @@
"bodySize": 273,
"content": {
"compression": 0,
+ "encoding": "base64",
"mimeType": "image/png",
- "size": 273
+ "size": 273,
+ "text": "iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAIAAAC0tAIdAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A\n/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oFHBQwNT+EC8IAAAAZdEVYdENv\nbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAbElEQVQoz5WSwRXAIAhDAwswjvsf3UYmoAf6\nfH2p2vJPHCIkiEQEAADujg1mloVEBOl671m01uiNUpsppTrRgwHC3RUVZIyxHEpkBv0jnZqak7qa\n9nrwfafc7ZgaFZ3MG/hk8fPP0e88UrrBC7kzMrHxbHvMAAAAAElFTkSuQmCC\n"
},
"cookies": [],
"headers": [
@@ -965,7 +975,7 @@
"status": 200,
"statusText": "OK"
},
- "startedDateTime": "2010-07-27T20:03:00.095036Z",
+ "startedDateTime": "2010-07-28T03:03:00.095036Z",
"time": 251,
"timings": {
"blocked": -1,
@@ -1025,7 +1035,7 @@
}
],
"headersSize": -1,
- "httpVersion": "1.1",
+ "httpVersion": "HTTP/1.1",
"method": "GET",
"queryString": [],
"url": "http://andrewfleenor.users.sourceforge.net/fhs/dir-open.png"
@@ -1034,8 +1044,10 @@
"bodySize": 232,
"content": {
"compression": 0,
+ "encoding": "base64",
"mimeType": "image/png",
- "size": 232
+ "size": 232,
+ "text": "iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAIAAAC0tAIdAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAL\nEwAACxMBAJqcGAAAAAd0SU1FB9oEDRUpAVE3JRIAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRo\nIEdJTVBXgQ4XAAAAVUlEQVQoz7WSsQ3AQAgDzSs97D+lmcApiFJEyguKdwPFgSywSQIAIDPxI3ev\nxiRtuM/MwkRGsk/Pdl9VImLPPRb6TkjOnMzpjpliTl5wvRk48PlRBm/H/CZLf1D4lAAAAABJRU5E\nrkJggg==\n"
},
"cookies": [],
"headers": [
@@ -1086,7 +1098,7 @@
"status": 200,
"statusText": "OK"
},
- "startedDateTime": "2010-07-27T20:03:00.478541Z",
+ "startedDateTime": "2010-07-28T03:03:00.478541Z",
"time": 87,
"timings": {
"blocked": -1,
@@ -1105,7 +1117,7 @@
"onContentLoad": -1,
"onLoad": -1
},
- "startedDateTime": "2010-07-27T20:02:59.541812Z",
+ "startedDateTime": "2010-07-28T03:02:59.541812Z",
"title": "http://andrewfleenor.users.sourceforge.net/fhs/fhs.xml"
}
],
62 tests/fhs_ncomp.pcap.har
View
@@ -50,7 +50,7 @@
}
],
"headersSize": -1,
- "httpVersion": "1.1",
+ "httpVersion": "HTTP/1.1",
"method": "GET",
"queryString": [],
"url": "http://andrewfleenor.users.sourceforge.net/fhs/fhs.xml"
@@ -112,7 +112,7 @@
"status": 200,
"statusText": "OK"
},
- "startedDateTime": "2010-07-27T20:31:52.972106Z",
+ "startedDateTime": "2010-07-28T03:31:52.972106Z",
"time": 1866,
"timings": {
"blocked": -1,
@@ -168,7 +168,7 @@
}
],
"headersSize": -1,
- "httpVersion": "1.1",
+ "httpVersion": "HTTP/1.1",
"method": "GET",
"queryString": [],
"url": "http://andrewfleenor.users.sourceforge.net/fhs/fhs.xsl"
@@ -230,7 +230,7 @@
"status": 200,
"statusText": "OK"
},
- "startedDateTime": "2010-07-27T20:31:53.275921Z",
+ "startedDateTime": "2010-07-28T03:31:53.275921Z",
"time": 4065,
"timings": {
"blocked": -1,
@@ -286,7 +286,7 @@
}
],
"headersSize": -1,
- "httpVersion": "1.1",
+ "httpVersion": "HTTP/1.1",
"method": "GET",
"queryString": [],
"url": "http://andrewfleenor.users.sourceforge.net/fhs/fhs.css"
@@ -348,7 +348,7 @@
"status": 200,
"statusText": "OK"
},
- "startedDateTime": "2010-07-27T20:31:57.355689Z",
+ "startedDateTime": "2010-07-28T03:31:57.355689Z",
"time": 89,
"timings": {
"blocked": -1,
@@ -404,7 +404,7 @@
}
],
"headersSize": -1,
- "httpVersion": "1.1",
+ "httpVersion": "HTTP/1.1",
"method": "GET",
"queryString": [],
"url": "http://andrewfleenor.users.sourceforge.net/fhs/fhs.js"
@@ -413,8 +413,10 @@
"bodySize": 1774,
"content": {
"compression": 0,
+ "encoding": "base64",
"mimeType": "application/x-javascript",
- "size": 1774
+ "size": 1774,
+ "text": "DQovL29uZSBmdW5jdGlvbiB0byBleHBhbmQgb3IgY2xvc2UgYSBkaXJlY3RvcnkgZW50cnkNCmZ1\nbmN0aW9uIHRvZ2dsZURpckV4cGFuc2lvbihiYXNlX2lkKXsNCiAgICB0b2dnbGVJbWFnZShiYXNl\nX2lkICsgJzppbWcnLCAnZGlyLWNsb3NlZC5wbmcnLCAnZGlyLW9wZW4ucG5nJykNCiAgICB0b2dn\nbGVEaXNwbGF5KGJhc2VfaWQgKyAnOmlubmVyJywgJ2Jsb2NrJykNCn0NCg0KLy9kaXR0bywgYnV0\nIGZvciBwbGFpbiBmaWxlcw0KZnVuY3Rpb24gdG9nZ2xlRmlsZUV4cGFuc2lvbihiYXNlX2lkKXsN\nCiAgICB0b2dnbGVJbWFnZShiYXNlX2lkICsgJzppbWcnLCAnZmlsZS1jbG9zZWQucG5nJywgJ2Zp\nbGUtb3Blbi5wbmcnKQ0KICAgIHRvZ2dsZURpc3BsYXkoYmFzZV9pZCArICc6aW5uZXInLCAnYmxv\nY2snKQ0KfQ0KDQovL3N3aXRjaGVzIHRoZSBzcmMgb2YgYW4gaW1hZ2UgYmV0d2VlbiB0d28gYWx0\nZXJuYXRpdmVzDQpmdW5jdGlvbiB0b2dnbGVJbWFnZShpbWdfaWQsIGltZzEsIGltZzIpew0KICAg\nIGltZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGltZ19pZCkNCiAgICBpZihpbWcuc3JjLmVu\nZHNXaXRoKGltZzEpKXsNCiAgICAgICAgaW1nLnNyYyA9IGltZzIgDQogICAgfSBlbHNlIGlmKGlt\nZy5zcmMuZW5kc1dpdGgoaW1nMikpew0KICAgICAgICBpbWcuc3JjID0gaW1nMQ0KICAgIH0gZWxz\nZSB7DQogICAgICAgIHRocm93ICd0b2dnbGVJbWFnZTogaW52YWxpZCBpbWFnZSBzcmMoXCcnICsg\naW1nLnNyYyArICdcJywgbmVpdGhlciBcJycgKyBpbWcxICsgJ1wnIG5vciBcJycgKyBpbWcyICsg\nJ1wnJw0KICAgIH0NCn0NCg0KLy9zaW1wbGUgZnVuY3Rpb24gdGhhdCBleHBhbmRzIG9yIGNvbGxh\ncHNlcyBhbnkgZWxlbWVudA0KZnVuY3Rpb24gdG9nZ2xlRGlzcGxheShlbGVtZW50X2lkLCBkaXNw\nKXsNCiAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudF9pZCkNCiAg\nICBpZighZWxlbWVudCl7IC8vaWYgdGhlIGVsZW1lbnQgd2FzIG5vdCBmb3VuZA0KICAgICAgICB0\naHJvdyAoInRvZ2dsZURpc3BsYXk6IGZhaWxlZCB0byBmaW5kIGlkOiAnIiArIGVsZW1lbnRfaWQg\nKyAiJyIpDQogICAgfSBlbHNlIGlmKGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9PSAnbm9uZScpew0K\nICAgICAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBkaXNwDQogICAgfSBlbHNlIHsgICAvL3Ro\naXMgaW5jbHVkZXMgZWxlbWVudHMgd2l0aCBubyBleHBsaWNpdCBkaXNwbGF5IHByb3AsIHdoaWNo\nIG1lYW5zIHlvdSBjYW4gc2VlIHRoZW0NCiAgICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0g\nJ25vbmUnDQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBoaWRlKGVsZW1lbnQpew0KICAgIGVsZW1lbnQu\nc3R5bGUuZGlzcGxheSA9ICdub25lJw0KfQ0KDQpmdW5jdGlvbiBzaG93KGVsZW1lbnQsIHByb3Ap\new0KICAgIGlmKHByb3AgPT0gJ2Jsb2NrJyB8fCBwcm9wID09ICdpbmxpbmUnKXsNCiAgICAgICAg\nZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gcHJvcA0KICAgIH0gZWxzZSB7DQogICAgICAgIHRocm93\nICdmdW5jdGlvbiBzaG93OiBpbnZhbGlkIHBhcmFtZXRlcicNCiAgICB9DQp9DQoNClN0cmluZy5w\ncm90b3R5cGUuZW5kc1dpdGggPSBmdW5jdGlvbihzdHIpDQp7DQogICAgdmFyIGxhc3RJbmRleCA9\nIHRoaXMubGFzdEluZGV4T2Yoc3RyKTsNCiAgICByZXR1cm4gdGhpcy5sZW5ndGggPj0gc3RyLmxl\nbmd0aCAmJiB0aGlzLmxhc3RJbmRleE9mKHN0cikgKyBzdHIubGVuZ3RoID09IHRoaXMubGVuZ3Ro\nDQp9DQoNCg==\n"
},
"cookies": [],
"headers": [
@@ -465,7 +467,7 @@
"status": 200,
"statusText": "OK"
},
- "startedDateTime": "2010-07-27T20:31:57.359355Z",
+ "startedDateTime": "2010-07-28T03:31:57.359355Z",
"time": 112,
"timings": {
"blocked": -1,
@@ -521,7 +523,7 @@
}
],
"headersSize": -1,
- "httpVersion": "1.1",
+ "httpVersion": "HTTP/1.1",
"method": "GET",
"queryString": [],
"url": "http://andrewfleenor.users.sourceforge.net/fhs/dir-closed.png"
@@ -530,8 +532,10 @@
"bodySize": 251,
"content": {
"compression": 0,
+ "encoding": "base64",
"mimeType": "image/png",
- "size": 251
+ "size": 251,
+ "text": "iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAIAAAC0tAIdAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAL\nEwAACxMBAJqcGAAAAAd0SU1FB9oEDRUoHCsqeIoAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRo\nIEdJTVBXgQ4XAAAAaElEQVQoz5WSwQ3AMAgDDQuE/aeECeiDKqqcNC33QooJtkAyEwCAiMALY4wq\nJDNJZ2ZVuDv1KH0zpVQXejBARISig5S5dShxZ6Ao54aek776j5nSCEkpLr02ncwb+GSz+efoNY+0\nbvACVp8376DuttAAAAAASUVORK5CYII=\n"
},
"cookies": [],
"headers": [
@@ -582,7 +586,7 @@
"status": 200,
"statusText": "OK"
},
- "startedDateTime": "2010-07-27T20:31:57.364757Z",
+ "startedDateTime": "2010-07-28T03:31:57.364757Z",
"time": 184,
"timings": {
"blocked": -1,
@@ -638,7 +642,7 @@
}
],
"headersSize": -1,
- "httpVersion": "1.1",
+ "httpVersion": "HTTP/1.1",
"method": "GET",
"queryString": [],
"url": "http://andrewfleenor.users.sourceforge.net/fhs/file-closed.png"
@@ -647,8 +651,10 @@
"bodySize": 252,
"content": {
"compression": 0,
+ "encoding": "base64",
"mimeType": "image/png",
- "size": 252
+ "size": 252,
+ "text": "iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAIAAAC0tAIdAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAL\nEwAACxMBAJqcGAAAAAd0SU1FB9oEDRUuJ8x7NigAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRo\nIEdJTVBXgQ4XAAAAaUlEQVQoz42SSw7AIAgFH8Q93P+UeAK6aEMTVISVkhk/ALk7AABzThxCRN4F\nuXvBJYdjo6pXgcws0ZFZg9eUqp7u4dMxW4frhyaHO9UIoUXHv0eTu9DbOo4m99EiEp0vuNz5Gv2n\nqj+DD5h8LXdBt4lUAAAAAElFTkSuQmCC\n"
},
"cookies": [],
"headers": [
@@ -699,7 +705,7 @@
"status": 200,
"statusText": "OK"
},
- "startedDateTime": "2010-07-27T20:31:57.368798Z",
+ "startedDateTime": "2010-07-28T03:31:57.368798Z",
"time": 206,
"timings": {
"blocked": -1,
@@ -755,7 +761,7 @@
}
],
"headersSize": -1,
- "httpVersion": "1.1",
+ "httpVersion": "HTTP/1.1",
"method": "GET",
"queryString": [],
"url": "http://andrewfleenor.users.sourceforge.net/fhs/file-empty.png"
@@ -764,8 +770,10 @@
"bodySize": 273,
"content": {
"compression": 0,
+ "encoding": "base64",
"mimeType": "image/png",
- "size": 273
+ "size": 273,
+ "text": "iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAIAAAC0tAIdAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A\n/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oFHBQwCGfsR9MAAAAZdEVYdENv\nbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAbElEQVQoz5WSuxEAIQgFH4w55dh/SDdaARd4\nQ6CiSCTOrh+AzAwAgN47ghCRsSAzO3CTw56o6lWg1tpE11ojmtctVY3u4eiYrcPnh04OZ6rhQor2\nf5ckd6G3dSxJ7qdFxDt/4Ebn3+aEnmbwA+7INyTfz+Z3AAAAAElFTkSuQmCC\n"
},
"cookies": [],
"headers": [
@@ -816,7 +824,7 @@
"status": 200,
"statusText": "OK"
},
- "startedDateTime": "2010-07-27T20:31:57.382308Z",
+ "startedDateTime": "2010-07-28T03:31:57.382308Z",
"time": 287,
"timings": {
"blocked": -1,
@@ -872,7 +880,7 @@
}
],
"headersSize": -1,
- "httpVersion": "1.1",
+ "httpVersion": "HTTP/1.1",
"method": "GET",
"queryString": [],
"url": "http://andrewfleenor.users.sourceforge.net/fhs/dir-empty.png"
@@ -881,8 +889,10 @@
"bodySize": 273,
"content": {
"compression": 0,
+ "encoding": "base64",
"mimeType": "image/png",
- "size": 273
+ "size": 273,
+ "text": "iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAIAAAC0tAIdAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A\n/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oFHBQwNT+EC8IAAAAZdEVYdENv\nbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAbElEQVQoz5WSwRXAIAhDAwswjvsf3UYmoAf6\nfH2p2vJPHCIkiEQEAADujg1mloVEBOl671m01uiNUpsppTrRgwHC3RUVZIyxHEpkBv0jnZqak7qa\n9nrwfafc7ZgaFZ3MG/hk8fPP0e88UrrBC7kzMrHxbHvMAAAAAElFTkSuQmCC\n"
},
"cookies": [],
"headers": [
@@ -933,7 +943,7 @@
"status": 200,
"statusText": "OK"
},
- "startedDateTime": "2010-07-27T20:31:57.388756Z",
+ "startedDateTime": "2010-07-28T03:31:57.388756Z",
"time": 224,
"timings": {
"blocked": -1,
@@ -989,7 +999,7 @@
}
],
"headersSize": -1,
- "httpVersion": "1.1",
+ "httpVersion": "HTTP/1.1",
"method": "GET",
"queryString": [],
"url": "http://andrewfleenor.users.sourceforge.net/fhs/dir-open.png"
@@ -998,8 +1008,10 @@
"bodySize": 232,
"content": {
"compression": 0,
+ "encoding": "base64",
"mimeType": "image/png",
- "size": 232
+ "size": 232,
+ "text": "iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAIAAAC0tAIdAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAL\nEwAACxMBAJqcGAAAAAd0SU1FB9oEDRUpAVE3JRIAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRo\nIEdJTVBXgQ4XAAAAVUlEQVQoz7WSsQ3AQAgDzSs97D+lmcApiFJEyguKdwPFgSywSQIAIDPxI3ev\nxiRtuM/MwkRGsk/Pdl9VImLPPRb6TkjOnMzpjpliTl5wvRk48PlRBm/H/CZLf1D4lAAAAABJRU5E\nrkJggg==\n"
},
"cookies": [],
"headers": [
@@ -1050,7 +1062,7 @@
"status": 200,
"statusText": "OK"
},
- "startedDateTime": "2010-07-27T20:31:57.882958Z",
+ "startedDateTime": "2010-07-28T03:31:57.882958Z",
"time": 86,
"timings": {
"blocked": -1,
@@ -1069,7 +1081,7 @@
"onContentLoad": -1,
"onLoad": -1
},
- "startedDateTime": "2010-07-27T20:31:52.972106Z",
+ "startedDateTime": "2010-07-28T03:31:52.972106Z",
"title": "http://andrewfleenor.users.sourceforge.net/fhs/fhs.xml"
}
],
12 tests/github.pcap.har
View
@@ -54,7 +54,7 @@
}
],
"headersSize": -1,
- "httpVersion": "1.1",
+ "httpVersion": "HTTP/1.1",
"method": "GET",
"queryString": [
{
@@ -153,7 +153,7 @@
"status": 200,
"statusText": "OK"
},
- "startedDateTime": "2011-01-31T15:41:47.204937Z",
+ "startedDateTime": "2011-01-31T23:41:47.204937Z",
"time": 158,
"timings": {
"blocked": -1,
@@ -209,7 +209,7 @@
}
],
"headersSize": -1,
- "httpVersion": "1.1",
+ "httpVersion": "HTTP/1.1",
"method": "POST",
"queryString": [],
"url": "http://toolbarqueries.clients.google.com/tbproxy/af/query"
@@ -259,7 +259,7 @@
"status": 200,
"statusText": "OK"
},
- "startedDateTime": "2011-01-31T15:41:48.579586Z",
+ "startedDateTime": "2011-01-31T23:41:48.579586Z",
"time": 197,
"timings": {
"blocked": -1,
@@ -278,7 +278,7 @@
"onContentLoad": -1,
"onLoad": -1
},
- "startedDateTime": "2011-01-31T15:41:47.204937Z",
+ "startedDateTime": "2011-01-31T23:41:47.204937Z",
"title": "http://www.google.com/url?sa=t&source=web&cd=1&ved=0CBMQFjAA&url=https%3A%2F%2Fgithub.com%2Fandrewf%2Fpcap2har&rct=j&q=pcap2har&ei=skdHTYe3HpHSsAOI0NTiAQ&usg=AFQjCNGtdj1QdkZlT74_PKB0_ne3b9h2Vw&sig2=SJ0322g854RsyqtEDxQC2w"
},
{
@@ -287,7 +287,7 @@
"onContentLoad": -1,
"onLoad": -1
},
- "startedDateTime": "2011-01-31T15:41:48.579586Z",
+ "startedDateTime": "2011-01-31T23:41:48.579586Z",
"title": "http://toolbarqueries.clients.google.com/tbproxy/af/query"
}
],
10 tests/http.pcap.har
View
@@ -54,7 +54,7 @@
}
],
"headersSize": -1,
- "httpVersion": "1.1",
+ "httpVersion": "HTTP/1.1",
"method": "GET",
"queryString": [],
"url": "http://www.ethereal.com/download.html"
@@ -112,7 +112,7 @@
"status": 200,
"statusText": "OK"
},
- "startedDateTime": "2004-05-13T03:17:07.311224Z",
+ "startedDateTime": "2004-05-13T10:17:07.311224Z",
"time": 4846,
"timings": {
"blocked": -1,
@@ -168,7 +168,7 @@
}
],
"headersSize": -1,
- "httpVersion": "1.1",
+ "httpVersion": "HTTP/1.1",
"method": "GET",
"queryString": [
{
@@ -263,7 +263,7 @@
"status": 200,
"statusText": "OK"
},
- "startedDateTime": "2004-05-13T03:17:10.295515Z",
+ "startedDateTime": "2004-05-13T10:17:10.295515Z",
"time": 971,
"timings": {
"blocked": -1,
@@ -282,7 +282,7 @@
"onContentLoad": -1,
"onLoad": -1
},
- "startedDateTime": "2004-05-13T03:17:07.311224Z",
+ "startedDateTime": "2004-05-13T10:17:07.311224Z",
"title": "http://www.ethereal.com/download.html"
}
],
2,072 tests/out-of-order.pcap.har
View
1,265 additions, 807 deletions not shown
286 tests/pcapr.net.pcap.har
View
171 additions, 115 deletions not shown
8 tests/run_tests.sh
View
@@ -17,16 +17,16 @@ do
rm $pcap.new.har
continue
else
- echo "$pcap produced different har, log in $pcap.log"
+ echo " $pcap produced different har, log in $pcap.log"
fi
else
- echo "no har file to compare with for $pcap"
+ echo " no har file to compare with for $pcap"
continue
fi
else
- echo "$pcap failed."
+ echo " $pcap failed."
fi
- echo "see log in $pcap.log"
+ echo " see log in $pcap.log"
cp pcap2har.log $pcap.log
done
380 tests/sajal.pcap.har
View
225 additions, 155 deletions not shown
Please sign in to comment.
Something went wrong with that request. Please try again.