view release on metacpan or search on metacpan
lib/Archive/Har.pm view on Meta::CPAN
my @pages;
foreach my $ie_page ( $ie_pages->getChildrenByTagName('page') ) {
my $page = Archive::Har::Page->new();
foreach my $ie_id ( $ie_page->getChildrenByTagName('id') ) {
$page->id( $ie_id->findvalue('text()') );
}
foreach my $ie_title ( $ie_page->getChildrenByTagName('title') ) {
$page->title( $ie_title->findvalue('text()') );
}
foreach my $ie_started (
$ie_page->getChildrenByTagName('startedDateTime') )
{
$page->started_date_time( $ie_started->findvalue('text()') );
}
my $page_timings = Archive::Har::Page::PageTimings->new();
foreach
my $ie_timings ( $ie_page->getChildrenByTagName('pageTimings') )
{
foreach my $ie_content (
$ie_timings->getChildrenByTagName('onContentLoad') )
{
lib/Archive/Har.pm view on Meta::CPAN
foreach my $ie_entries ( $ie_log->getChildrenByTagName('entries') ) {
my @entries;
foreach my $ie_entry ( $ie_entries->getChildrenByTagName('entry') ) {
my $entry = Archive::Har::Entry->new();
foreach
my $ie_pageref ( $ie_entry->getChildrenByTagName('pageref') )
{
$entry->pageref( $ie_pageref->findvalue('text()') );
}
foreach my $ie_started (
$ie_entry->getChildrenByTagName('startedDateTime') )
{
$entry->started_date_time( $ie_started->findvalue('text()') );
}
foreach
my $ie_timings ( $ie_entry->getChildrenByTagName('timings') )
{
my $timings = Archive::Har::Entry::Timings->new();
foreach
my $ie_send ( $ie_timings->getChildrenByTagName('send') )
{
lib/Archive/Har/Entry.pm view on Meta::CPAN
sub _DOES_NOT_APPLY { return -1 }
sub new {
my ( $class, $params ) = @_;
my $self = {};
bless $self, $class;
if ( defined $params ) {
if ( defined $params->{pageref} ) {
$self->pageref( $params->{pageref} );
}
$self->started_date_time( $params->{startedDateTime} );
$self->request(
Archive::Har::Entry::Request->new( $params->{request} ) );
$self->response(
Archive::Har::Entry::Response->new( $params->{response} ) );
$self->cache( Archive::Har::Entry::Cache->new( $params->{cache} ) );
$self->timings(
Archive::Har::Entry::Timings->new( $params->{timings} ) );
if ( defined $params->{serverIPAddress} ) {
$self->server_ip_address( $params->{serverIPAddress} );
}
lib/Archive/Har/Entry.pm view on Meta::CPAN
my ( $self, $new ) = @_;
my $old = $self->{pageref};
if ( @_ > 1 ) {
$self->{pageref} = $new;
}
return $old;
}
sub started_date_time {
my ( $self, $new ) = @_;
my $old = $self->{startedDateTime};
if ( @_ > 1 ) {
if ( defined $new ) {
my $date_regex = qr/\d{4}[-]\d{2}[-]\d{2}/smx;
my $time_regex = qr/\d{2}:\d{2}:\d{2}[.]\d+/smx;
my $zone_regex = qr/(?:[+]\d{2}:\d{2}|Z)/smx;
if ( $new =~ /^${date_regex}T${time_regex}${zone_regex}$/smx ) {
$self->{startedDateTime} = $new;
}
else {
Carp::croak('started_date_time is not formatted correctly');
}
}
else {
$self->{startedDateTime} = '0000-00-00T00:00:00.0+00:00';
}
}
if ( ( defined $old ) && ( $old eq '0000-00-00T00:00:00.0+00:00' ) ) {
return;
}
else {
return $old;
}
}
lib/Archive/Har/Entry.pm view on Meta::CPAN
return $old;
}
sub TO_JSON {
my ($self) = @_;
my $json = {};
if ( defined $self->pageref() ) {
$json->{pageref} = $self->pageref();
}
if ( defined $self->started_date_time() ) {
$json->{startedDateTime} = $self->started_date_time();
}
else {
$json->{startedDateTime} = '0000-00-00T00:00:00.0+00:00';
}
$json->{time} = $self->time();
$json->{request} = $self->request();
$json->{response} = $self->response();
$json->{cache} = $self->cache();
$json->{timings} = $self->timings();
if ( defined $self->server_ip_address() ) {
$json->{serverIPAddress} = $self->server_ip_address();
}
if ( defined $self->connection() ) {
lib/Archive/Har/Entry.pm view on Meta::CPAN
=head1 SYNOPSIS
use Archive::Har();
my $http_archive_string = '"log": { "version": "1.1", .... ';
my $har = Archive::Har->new();
$har->string($http_archive_string);
foreach my $entry ($har->entries()) {
print "PageRef: " . $entry->pageref() . "\n";
print "DateTime: " . $entry->started_date_time() . "\n";
print "Total Elasped Time: " . $entry->time() . "\n";
my $request = $entry->request();
my $response = $entry->response();
my $cache = $entry->cache();
my $timing = $entry->pageTimings();
print "Server IP Address: " . $entry->server_ip_address() . "\n";
print "Connection: " . $entry->connection() . "\n";
print "Comment: " . $entry->comment() . "\n";
$entry->comment("Something interesting here");
}
lib/Archive/Har/Page.pm view on Meta::CPAN
sub new {
my ( $class, $params ) = @_;
my $self = {};
bless $self, $class;
if ( defined $params ) {
$self->id( $params->{id} );
if ( defined $params->{title} ) {
$self->title( $params->{title} );
}
if ( defined $params->{startedDateTime} ) {
$self->started_date_time( $params->{startedDateTime} );
}
$self->page_timings(
Archive::Har::Page::PageTimings->new(
$params->{pageTimings} || {}
)
);
if ( defined $params->{comment} ) {
$self->comment( $params->{comment} );
}
foreach my $key ( sort { $a cmp $b } keys %{$params} ) {
lib/Archive/Har/Page.pm view on Meta::CPAN
if ( defined $old ) {
return $old;
}
else {
return;
}
}
sub started_date_time {
my ( $self, $new ) = @_;
my $old = $self->{startedDateTime};
if ( @_ > 1 ) {
if ( defined $new ) {
my $date_regex = qr/\d{4}[-]\d{2}[-]\d{2}/smx;
my $time_regex = qr/\d{2}:\d{2}:\d{2}[.]\d+/smx;
my $zone_regex = qr/(?:[+]\d{2}:\d{2}|Z)/smx;
if ( $new =~ /^${date_regex}T${time_regex}${zone_regex}$/smx ) {
$self->{startedDateTime} = $new;
}
else {
Carp::croak('started_date_time is not formatted correctly');
}
}
else {
$self->{startedDateTime} = '0000-00-00T00:00:00.0+00:00';
}
}
if ( ( defined $old ) && ( $old eq '0000-00-00T00:00:00.0+00:00' ) ) {
return;
}
else {
return $old;
}
}
lib/Archive/Har/Page.pm view on Meta::CPAN
sub TO_JSON {
my ($self) = @_;
my $json = { pageTimings => $self->page_timings(), };
if ( defined $self->title() ) {
$json->{title} = $self->title();
}
else {
$json->{title} = 'Unknown';
}
if ( defined $self->started_date_time() ) {
$json->{startedDateTime} = $self->started_date_time();
}
else {
$json->{startedDateTime} = '0000-00-00T00:00:00.0+00:00';
}
if ( defined $self->id() ) {
$json->{id} = $self->id();
}
if ( defined $self->comment() ) {
$json->{comment} = $self->comment();
}
foreach my $key ( sort { $a cmp $b } keys %{$self} ) {
next if ( !defined $self->{$key} );
if ( $key =~ /^_[[:alnum:]]+$/smx ) { # private fields
lib/Archive/Har/Page.pm view on Meta::CPAN
=head1 SYNOPSIS
use Archive::Har();
my $http_archive_string = '"log": { "version": "1.1", .... ';
my $har = Archive::Har->new();
$har->string($http_archive_string);
foreach my $page ($har->pages()) {
$page->comment("Something interesting here");
print "DateTime: " . $page->started_date_time() . "\n";
print "Id: " . $page->id() . "\n";
print "Title: ". $page->title() . "\n";
my $timing = $page->page_timings();
print "Comment: " . $page->comment() . "\n";
}
=head1 DESCRIPTION
This Module is intended to provide an interface to create/read/update
Page objects in HTTP Archive (HAR) files.
my $chrome_string = <<'_CHROME_RESULTS_';
{
"log": {
"version": "1.2",
"creator": {
"name": "WebInspector",
"version": "537.36"
},
"pages": [
{
"startedDateTime": "2017-04-17T00:00:31.336Z",
"id": "page_4",
"title": "https://www.google.com/",
"pageTimings": {
"onContentLoad": 456.8739999999707,
"onLoad": 920.7870000000185
}
}
],
"entries": [
{
"startedDateTime": "2017-04-17T00:00:31.336Z",
"time": 29.931000000033237,
"request": {
"method": "GET",
"url": "https://www.google.com/",
"httpVersion": "unknown",
"headers": [
{
"name": ":path",
"value": "/"
},
"send": 0.276000000212662,
"wait": 27.904999999918818,
"receive": 1.327999999830336,
"ssl": -1
},
"serverIPAddress": "144.131.80.163",
"connection": "312",
"pageref": "page_4"
},
{
"startedDateTime": "2017-04-17T00:00:31.366Z",
"time": 358.8839999997617,
"request": {
"method": "GET",
"url": "https://www.google.com.au/?gfe_rd=cr&ei=nwX0WIrDFaPM8gfYsLC4Bw",
"httpVersion": "unknown",
"headers": [
{
"name": ":path",
"value": "/?gfe_rd=cr&ei=nwX0WIrDFaPM8gfYsLC4Bw"
},
"send": 0.11799999992945198,
"wait": 217.72700000019572,
"receive": 140.78499999959573,
"ssl": -1
},
"serverIPAddress": "203.37.15.172",
"connection": "1029",
"pageref": "page_4"
},
{
"startedDateTime": "2017-04-17T00:00:31.687Z",
"time": 2.7260000001660956,
"request": {
"method": "GET",
"url": "https://www.google.com.au/images/branding/googlelogo/2x/googlelogo_color_120x44dp.png",
"httpVersion": "unknown",
"headers": [
{
"name": "Referer",
"value": "https://www.google.com.au/"
},
"connect": -1,
"send": 0,
"wait": 0.9810000001380121,
"receive": 1.5020000000731655,
"ssl": -1
},
"serverIPAddress": "203.37.15.172",
"pageref": "page_4"
},
{
"startedDateTime": "2017-04-17T00:00:31.688Z",
"time": 11.88400000000911,
"request": {
"method": "GET",
"url": "https://www.google.com.au/xjs/_/js/k=xjs.s.en.HdZUDaaJ0bs.O/m=sx,c,sb,cdos,cr,elog,hsm,jsa,r,qsm,j,p,d,csi/am=gCNQtMcLWgD5v0MgiDcJC1IOjDDQ/rt=j/d=1/t=zcms/rs=ACT90oECZbd1BfWqSgFtPIzyy-UfOmp8SA",
"httpVersion": "unknown",
"headers": [
{
"name": "Referer",
"value": "https://www.google.com.au/"
},
"connect": -1,
"send": 0,
"wait": 2.3220000002766037,
"receive": 9.42799999984345,
"ssl": -1
},
"serverIPAddress": "203.37.15.172",
"pageref": "page_4"
},
{
"startedDateTime": "2017-04-17T00:00:31.692Z",
"time": 1.5830000002097222,
"request": {
"method": "GET",
"url": "https://www.google.com.au/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png",
"httpVersion": "unknown",
"headers": [
{
"name": "Referer",
"value": "https://www.google.com.au/"
},
"connect": -1,
"send": 0,
"wait": 0.32899999996516194,
"receive": 1.0449999999764263,
"ssl": -1
},
"serverIPAddress": "203.37.15.172",
"pageref": "page_4"
},
{
"startedDateTime": "2017-04-17T00:00:31.698Z",
"time": 1.7859999998108833,
"request": {
"method": "GET",
"url": "https://ssl.gstatic.com/gb/images/i1_1967ca6a.png",
"httpVersion": "unknown",
"headers": [
{
"name": "Referer",
"value": "https://www.google.com.au/"
},
"connect": -1,
"send": 0,
"wait": 0.27700000009645,
"receive": 1.3169999997444393,
"ssl": -1
},
"serverIPAddress": "216.58.196.131",
"pageref": "page_4"
},
{
"startedDateTime": "2017-04-17T00:00:32.025Z",
"time": 32.303999999840016,
"request": {
"method": "GET",
"url": "https://www.google.com.au/xjs/_/js/k=xjs.s.en.HdZUDaaJ0bs.O/m=sy1p,sy1s,eme,emc,emd,sy1u,em1,syac,aa,abd,sy2u,sy2t,sy2v,sy2s,sy2r,sy2w,emf,async,syb8,sybd,sybh,sybc,syy,syb4,sybf,syb9,sybl,sybe,syz,sy3t,sybg,sybm,sybj,sy10,syb5,dvl,...
"httpVersion": "unknown",
"headers": [
{
"name": ":path",
"value": "/xjs/_/js/k=xjs.s.en.HdZUDaaJ0bs.O/m=sy1p,sy1s,eme,emc,emd,sy1u,em1,syac,aa,abd,sy2u,sy2t,sy2v,sy2s,sy2r,sy2w,emf,async,syb8,sybd,sybh,sybc,syy,syb4,sybf,syb9,sybl,sybe,syz,sy3t,sybg,sybm,sybj,sy10,syb5,dvl,erh,sy2y,foot,fpe,i...
},
"send": 0.21999999989930097,
"wait": 24.480000000039613,
"receive": 7.008000000041616,
"ssl": -1
},
"serverIPAddress": "203.37.15.172",
"connection": "1029",
"pageref": "page_4"
},
{
"startedDateTime": "2017-04-17T00:00:32.028Z",
"time": 0.9629999999560823,
"request": {
"method": "GET",
"url": "https://www.google.com/textinputassistant/tia.png",
"httpVersion": "unknown",
"headers": [
{
"name": "Referer",
"value": "https://www.google.com.au/"
},
"connect": -1,
"send": 0,
"wait": 0.29699999959120704,
"receive": 0.4870000002483723,
"ssl": -1
},
"serverIPAddress": "144.131.80.163",
"pageref": "page_4"
},
{
"startedDateTime": "2017-04-17T00:00:32.059Z",
"time": 8.231000000250788,
"request": {
"method": "GET",
"url": "https://www.gstatic.com/og/_/js/k=og.og2.en_US.Ufq3RuA0nEc.O/rt=j/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTt7mdJak8hjWIGkJ5bbpdX_OayNDQ",
"httpVersion": "unknown",
"headers": [
{
"name": "Referer",
"value": "https://www.google.com.au/"
},
"connect": -1,
"send": 0,
"wait": 1.9750000001295112,
"receive": 6.022999999913738,
"ssl": -1
},
"serverIPAddress": "216.58.196.131",
"pageref": "page_4"
},
{
"startedDateTime": "2017-04-17T00:00:32.106Z",
"time": 3.123000000414322,
"request": {
"method": "GET",
"url": "https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.DTPeBB_SvOA.O/m=gapi_iframes,googleapis_client,plusone/rt=j/sv=1/d=1/ed=1/rs=AHpOoo-J3J0yqNDMPVrmQT6j-SBFfGx8oA/cb=gapi.loaded_0",
"httpVersion": "unknown",
"headers": [
{
"name": "Referer",
"value": "https://www.google.com.au/"
},
"connect": -1,
"send": 0,
"wait": 0.602999999955501,
"receive": 2.27900000027148,
"ssl": -1
},
"serverIPAddress": "216.58.196.142",
"pageref": "page_4"
},
{
"startedDateTime": "2017-04-17T00:00:32.250Z",
"time": 1.3269999999465654,
"request": {
"method": "GET",
"url": "https://www.google.com.au/images/nav_logo242.png",
"httpVersion": "unknown",
"headers": [
{
"name": "Referer",
"value": "https://www.google.com.au/"
},
"connect": -1,
"send": 0,
"wait": 0.34099999993486596,
"receive": 0.7490000002690064,
"ssl": -1
},
"serverIPAddress": "203.37.15.172",
"pageref": "page_4"
},
{
"startedDateTime": "2017-04-17T00:00:32.260Z",
"time": 164.25500000013926,
"request": {
"method": "GET",
"url": "https://www.google.com.au/gen_204?s=webhp&atyp=csi&ei=nwX0WP7SG4LM0AT-wJ5A&imc=1&imn=1&imp=0&adh=&xjs=init.111.20.sb.56.spch.36.p.9.fpe.4.foot.2&p=s&npn=1&ima=0&rt=xjsls.47,prt.172,iml.172,dcl.173,xjses.224,jraids.292,jraide.312,xjs...
"httpVersion": "unknown",
"headers": [
{
"name": ":path",
"value": "/gen_204?s=webhp&atyp=csi&ei=nwX0WP7SG4LM0AT-wJ5A&imc=1&imn=1&imp=0&adh=&xjs=init.111.20.sb.56.spch.36.p.9.fpe.4.foot.2&p=s&npn=1&ima=0&rt=xjsls.47,prt.172,iml.172,dcl.173,xjses.224,jraids.292,jraide.312,xjsee.412,xjs.413,ol.6...
},
"send": 0.329999999848951,
"wait": 162.87499999998553,
"receive": 0.43300000015725004,
"ssl": -1
},
"serverIPAddress": "203.37.15.172",
"connection": "1029",
"pageref": "page_4"
},
{
"startedDateTime": "2017-04-17T00:00:42.117Z",
"time": 398.5829999996895,
"request": {
"method": "GET",
"url": "https://p5-ovsdz5igdxu5y-uahscowqoq6uh6qd-499617-i1-v6exp3.v4.metric.gstatic.com/v6exp3/6.gif",
"httpVersion": "unknown",
"headers": [
{
"name": ":path",
"value": "/v6exp3/6.gif"
},
"send": 0.13600000011101088,
"wait": 172.453000000133,
"receive": 0.7179999997784989,
"ssl": 31.019000000015012
},
"serverIPAddress": "216.58.196.146",
"connection": "1816",
"pageref": "page_4"
},
{
"startedDateTime": "2017-04-17T00:00:42.119Z",
"time": 395.46000000018466,
"request": {
"method": "GET",
"url": "https://p5-ovsdz5igdxu5y-uahscowqoq6uh6qd-499617-i2-v6exp3.ds.metric.gstatic.com/v6exp3/6.gif",
"httpVersion": "unknown",
"headers": [
{
"name": ":path",
"value": "/v6exp3/6.gif"
},
t/fiddler2.t view on Meta::CPAN
#!perl -T
use Test::More tests => 6;
use Archive::Har();
use JSON();
my $har = Archive::Har->new();
my $fiddler_string = <<'_FIDDLER2_RESULTS_';
{"log":{"creator":{"comment":"http://www.fiddler2.com", "version":"4.6.0.2", "name":"Fiddler"}, "entries":[{"startedDateTime":"2015-09-05T17:11:08.5888671+10:00", "response":{"headersSize":306, "httpVersion":"HTTP/1.1", "content":{"compression":0,...
_FIDDLER2_RESULTS_
ok($har->string($fiddler_string), "Successfully read Fiddler har archive for http://search.cpan.org/recent");
ok($har->version() eq '1.2', "INPUT: Fiddler produces a version 1.2 http archive");
ok($har->creator()->name() eq 'Fiddler', "INPUT: Fiddler's creator name is 'Fiddler'");
ok($har->creator()->version() eq '4.6.0.2', "INPUT: Fiddler's creator version is '4.6.0.2'");
ok($har->creator()->comment() eq 'http://www.fiddler2.com', "INPUT: Fiddler's creator comment is 'http://www.fiddler2.com'");
my $fiddler_ref = $har->hashref();
ok(!exists $fiddler_ref->{log}->{entries}->[0]->{request}->{postData}, "Empty postData entry stripped from Fiddler output");
t/firebug_cookies_n_cache.t view on Meta::CPAN
"creator": {
"name": "Firebug",
"version": "1.9"
},
"browser": {
"name": "Firefox",
"version": "11.0"
},
"pages": [
{
"startedDateTime": "2012-04-03T10:22:44.027+10:00",
"id": "page_7372",
"title": "Google Account Recovery",
"pageTimings": {
"onContentLoad": 1425,
"onLoad": 1904
}
}
],
"entries": [
{
"pageref": "page_7372",
"startedDateTime": "2012-04-03T10:22:44.027+10:00",
"time": 171,
"request": {
"method": "GET",
"url": "https://accounts.google.com/RecoverAccount?service=mail&continue=https%3A%2F%2Fmail.google.com%2Fmail%2F",
"httpVersion": "HTTP/1.1",
"cookies": [
{
"name": "GAPS",
"value": "1:DDqz846LwmuAAEMnC2gyLWhWKFcnVw:gbYgam4NP7QziTrv"
},
t/firebug_cookies_n_cache.t view on Meta::CPAN
"connect": 0,
"send": 0,
"wait": 169,
"receive": 1
},
"serverIPAddress": "173.194.72.84",
"connection": "443"
},
{
"pageref": "page_7372",
"startedDateTime": "2012-04-03T10:22:44.212+10:00",
"time": 971,
"request": {
"method": "GET",
"url": "https://www.google.com/accounts/recovery?hl=en&gaps=AHwGkRnIr9MHrtSt185ONR1lo-pCrkYz6yM6OsQ7bVzmMns3l13BWiR9PLWiDq0l6rLX2DvH8M3twg6yaZyOdFqKlMIWNA9HmA&service=mail&continue=https%3A%2F%2Fmail.google.com%2Fmail%2F",
"httpVersion": "HTTP/1.1",
"cookies": [
{
"name": "GMAIL_RTT",
"value": "270"
}
t/firebug_cookies_n_cache.t view on Meta::CPAN
"connect": 709,
"send": 0,
"wait": 260,
"receive": 1
},
"serverIPAddress": "74.125.237.116",
"connection": "443"
},
{
"pageref": "page_7372",
"startedDateTime": "2012-04-03T10:22:45.260+10:00",
"time": 63,
"request": {
"method": "GET",
"url": "https://www.google.com/accounts/recovery/resources/3135485014-options_bin.js",
"httpVersion": "HTTP/1.1",
"cookies": [
{
"name": "accountrecoverylocale",
"value": "en"
},
t/firebug_cookies_n_cache.t view on Meta::CPAN
"connect": 0,
"send": 0,
"wait": 32,
"receive": 31
},
"serverIPAddress": "74.125.237.116",
"connection": "443"
},
{
"pageref": "page_7372",
"startedDateTime": "2012-04-03T10:22:45.260+10:00",
"time": 171,
"request": {
"method": "GET",
"url": "https://www.google.com/accounts/recovery/resources/2134501236-all-css-kennedy.css",
"httpVersion": "HTTP/1.1",
"cookies": [
{
"name": "accountrecoverylocale",
"value": "en"
},
t/firebug_cookies_n_cache.t view on Meta::CPAN
"connect": 134,
"send": 0,
"wait": 35,
"receive": 2
},
"serverIPAddress": "74.125.237.116",
"connection": "443"
},
{
"pageref": "page_7372",
"startedDateTime": "2012-04-03T10:22:45.579+10:00",
"time": 346,
"request": {
"method": "GET",
"url": "https://ssl.google-analytics.com/__utm.gif?utmwv=5.2.6&utms=1&utmn=1485686516&utmhn=www.google.com&utmcs=UTF-8&utmsr=1920x1200&utmvp=1920x795&utmsc=24-bit&utmul=en-us&utmje=0&utmfl=11.2%20r202&utmdt=Google%20Account%20Recovery&utmhi...
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "ssl.google-analytics.com"
t/firebug_cookies_n_cache.t view on Meta::CPAN
"connect": 0,
"send": 0,
"wait": 346,
"receive": 0
},
"serverIPAddress": "74.125.237.30",
"connection": "443"
},
{
"pageref": "page_7372",
"startedDateTime": "2012-04-03T10:22:46.002+10:00",
"time": 162,
"request": {
"method": "GET",
"url": "https://www.google.com/csi?v=3&s=account_recovery&action=allpages&rt=prt.70,ol.550",
"httpVersion": "HTTP/1.1",
"cookies": [
{
"name": "GMAIL_RTT",
"value": "270"
},
t/firebug_get.t view on Meta::CPAN
"creator": {
"name": "Firebug",
"version": "1.9"
},
"browser": {
"name": "Firefox",
"version": "11.0"
},
"pages": [
{
"startedDateTime": "2012-03-23T12:35:23.920+11:00",
"id": "page_16683",
"title": "http archive specification at DuckDuckGo",
"pageTimings": {
"onContentLoad": 2939,
"onLoad": 8701
}
}
],
"entries": [
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:23.920+11:00",
"time": 1108,
"request": {
"method": "GET",
"url": "https://duckduckgo.com/?q=http+archive+specification",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 796,
"send": 0,
"wait": 281,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:25.090+11:00",
"time": 281,
"request": {
"method": "GET",
"url": "https://duckduckgo.com/s422.css",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 0,
"send": 0,
"wait": 281,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:25.090+11:00",
"time": 1654,
"request": {
"method": "GET",
"url": "https://duckduckgo.com/d724.js",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 0,
"send": 0,
"wait": 811,
"receive": 546
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:26.853+11:00",
"time": 842,
"request": {
"method": "GET",
"url": "https://duckduckgo.com/f2/us.png",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 562,
"send": 0,
"wait": 280,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:26.853+11:00",
"time": 842,
"request": {
"method": "GET",
"url": "https://duckduckgo.com/assets/header_bg.v101.png",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 562,
"send": 0,
"wait": 280,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:26.853+11:00",
"time": 874,
"request": {
"method": "GET",
"url": "https://duckduckgo.com/assets/logo_header.v101.png",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 577,
"send": 0,
"wait": 297,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:26.853+11:00",
"time": 827,
"request": {
"method": "GET",
"url": "https://duckduckgo.com/assets/search_dropdown.v102.png",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 546,
"send": 0,
"wait": 281,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:26.853+11:00",
"time": 827,
"request": {
"method": "GET",
"url": "https://duckduckgo.com/assets/icon_xon.v101.png",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 562,
"send": 0,
"wait": 265,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:26.853+11:00",
"time": 842,
"request": {
"method": "GET",
"url": "https://duckduckgo.com/assets/header_button_bg.v101.png",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 562,
"send": 0,
"wait": 280,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:26.853+11:00",
"time": 1123,
"request": {
"method": "GET",
"url": "https://duckduckgo.com/assets/header_button_triangle.v101.png",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 0,
"send": 0,
"wait": 281,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:26.853+11:00",
"time": 1123,
"request": {
"method": "GET",
"url": "https://duckduckgo.com/assets/icon_feedback.v101.png",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 0,
"send": 0,
"wait": 281,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:26.853+11:00",
"time": 1092,
"request": {
"method": "GET",
"url": "https://duckduckgo.com/a.js?q=http%20archive%20specification&p=1",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 0,
"send": 0,
"wait": 265,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:26.853+11:00",
"time": 1373,
"request": {
"method": "GET",
"url": "https://duckduckgo.com/d.js?q=http%20archive%20specification&l=us-en&p=1&s=0",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 0,
"send": 0,
"wait": 281,
"receive": 265
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:26.853+11:00",
"time": 1108,
"request": {
"method": "GET",
"url": "https://duckduckgo.com/s.js?q=http%20archive%20specification",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 0,
"send": 0,
"wait": 266,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:28.351+11:00",
"time": 1170,
"request": {
"method": "GET",
"url": "https://i.duckduckgo.com/i/1.ico",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "i.duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 827,
"send": 0,
"wait": 281,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:28.351+11:00",
"time": 842,
"request": {
"method": "GET",
"url": "https://duckduckgo.com/assets/icon_triangle.v101.png",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 562,
"send": 0,
"wait": 265,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:28.351+11:00",
"time": 1466,
"request": {
"method": "GET",
"url": "https://i.duckduckgo.com/i/www.groups.google.com.ico",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "i.duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 827,
"send": 0,
"wait": 577,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:28.351+11:00",
"time": 1513,
"request": {
"method": "GET",
"url": "https://i.duckduckgo.com/i/www.stevesouders.com.ico",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "i.duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 858,
"send": 0,
"wait": 593,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:28.351+11:00",
"time": 1201,
"request": {
"method": "GET",
"url": "https://i.duckduckgo.com/i/www.w3.org.ico",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "i.duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 858,
"send": 0,
"wait": 281,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:28.351+11:00",
"time": 1544,
"request": {
"method": "GET",
"url": "https://i.duckduckgo.com/i/www.softwareishard.com.ico",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "i.duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 827,
"send": 0,
"wait": 655,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:28.351+11:00",
"time": 1201,
"request": {
"method": "GET",
"url": "https://i.duckduckgo.com/i/stackoverflow.com.ico",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "i.duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 858,
"send": 0,
"wait": 281,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:28.351+11:00",
"time": 1435,
"request": {
"method": "GET",
"url": "https://i.duckduckgo.com/i/blogs.msdn.com.ico",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "i.duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 0,
"send": 0,
"wait": 265,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:28.351+11:00",
"time": 1482,
"request": {
"method": "GET",
"url": "https://i.duckduckgo.com/i/www.adobe.com.ico",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "i.duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 0,
"send": 0,
"wait": 281,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:28.366+11:00",
"time": 2465,
"request": {
"method": "GET",
"url": "https://i.duckduckgo.com/i/www.fotoware.com.ico",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "i.duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 0,
"send": 0,
"wait": 1279,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:28.366+11:00",
"time": 1701,
"request": {
"method": "GET",
"url": "https://i.duckduckgo.com/i/en.wikipedia.org.ico",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "i.duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 0,
"send": 0,
"wait": 281,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:28.366+11:00",
"time": 2044,
"request": {
"method": "GET",
"url": "https://i.duckduckgo.com/i/ftp.ics.uci.edu.ico",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "i.duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 0,
"send": 0,
"wait": 593,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:28.366+11:00",
"time": 2122,
"request": {
"method": "GET",
"url": "https://i.duckduckgo.com/i/www.tiffinmotorhomes.com.ico",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "i.duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 0,
"send": 0,
"wait": 655,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:28.366+11:00",
"time": 1779,
"request": {
"method": "GET",
"url": "https://i.duckduckgo.com/i/www.datasheetarchive.com.ico",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "i.duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 0,
"send": 0,
"wait": 281,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:28.366+11:00",
"time": 1794,
"request": {
"method": "GET",
"url": "https://i.duckduckgo.com/i/www.archives.gov.ico",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "i.duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 0,
"send": 0,
"wait": 265,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:28.366+11:00",
"time": 2293,
"request": {
"method": "GET",
"url": "https://i.duckduckgo.com/i/imaging.nikon.com.ico",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "i.duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 0,
"send": 0,
"wait": 592,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:28.366+11:00",
"time": 3089,
"request": {
"method": "GET",
"url": "https://i.duckduckgo.com/i/neworleanspubliclibrary.org.ico",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "i.duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 0,
"send": 0,
"wait": 1310,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:28.366+11:00",
"time": 2059,
"request": {
"method": "GET",
"url": "https://i.duckduckgo.com/i/www.archive.org.ico",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "i.duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 0,
"send": 0,
"wait": 265,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:28.366+11:00",
"time": 2902,
"request": {
"method": "GET",
"url": "https://i.duckduckgo.com/i/scap.nist.gov.ico",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "i.duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 0,
"send": 0,
"wait": 858,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:28.366+11:00",
"time": 2980,
"request": {
"method": "GET",
"url": "https://i.duckduckgo.com/i/www.openarchives.org.ico",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "i.duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 0,
"send": 0,
"wait": 921,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:28.366+11:00",
"time": 2808,
"request": {
"method": "GET",
"url": "https://i.duckduckgo.com/i/www.rfc-archive.org.ico",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "i.duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 0,
"send": 0,
"wait": 686,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:28.366+11:00",
"time": 2559,
"request": {
"method": "GET",
"url": "https://i.duckduckgo.com/i/blogs.oracle.com.ico",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "i.duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 0,
"send": 0,
"wait": 266,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:28.366+11:00",
"time": 2761,
"request": {
"method": "GET",
"url": "https://i.duckduckgo.com/i/www.faqs.org.ico",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "i.duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 0,
"send": 0,
"wait": 296,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:28.366+11:00",
"time": 3697,
"request": {
"method": "GET",
"url": "https://i.duckduckgo.com/i/support.jvc.com.ico",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "i.duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 0,
"send": 0,
"wait": 1138,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:28.366+11:00",
"time": 3495,
"request": {
"method": "GET",
"url": "https://i.duckduckgo.com/i/landsat.usgs.gov.ico",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "i.duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 0,
"send": 0,
"wait": 734,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:28.366+11:00",
"time": 3105,
"request": {
"method": "GET",
"url": "https://i.duckduckgo.com/i/download.intel.com.ico",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "i.duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 0,
"send": 0,
"wait": 297,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:28.366+11:00",
"time": 3900,
"request": {
"method": "GET",
"url": "https://i.duckduckgo.com/i/xml.coverpages.org.ico",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "i.duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 0,
"send": 0,
"wait": 998,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:28.366+11:00",
"time": 3541,
"request": {
"method": "GET",
"url": "https://i.duckduckgo.com/i/java.net.ico",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "i.duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 0,
"send": 0,
"wait": 561,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:28.366+11:00",
"time": 983,
"request": {
"method": "GET",
"url": "https://builder.duckduckgo.com/b.js?q=http%20archive%20specification",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "builder.duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 655,
"send": 0,
"wait": 328,
"receive": 0
},
"serverIPAddress": "176.34.131.233",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:29.427+11:00",
"time": 874,
"request": {
"method": "GET",
"url": "https://duckduckgo.com/assets/side_button_off.v101.png",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 593,
"send": 0,
"wait": 281,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:29.427+11:00",
"time": 889,
"request": {
"method": "GET",
"url": "https://duckduckgo.com/assets/icon_plus.v102.png",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "duckduckgo.com"
t/firebug_get.t view on Meta::CPAN
"connect": 608,
"send": 0,
"wait": 281,
"receive": 0
},
"serverIPAddress": "46.51.216.187",
"connection": "443"
},
{
"pageref": "page_16683",
"startedDateTime": "2012-03-23T12:35:31.783+11:00",
"time": 826,
"request": {
"method": "GET",
"url": "https://duckduckgo.com/assets/results_highlight_bg.v101.png",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "duckduckgo.com"
t/firebug_post.t view on Meta::CPAN
"creator": {
"name": "Firebug",
"version": "1.9"
},
"browser": {
"name": "Firefox",
"version": "11.0"
},
"pages": [
{
"startedDateTime": "2012-03-23T16:31:05.716+11:00",
"id": "page_40125",
"title": "DuckDuckGo",
"pageTimings": {
"onContentLoad": 547,
"onLoad": 3987
}
}
],
"entries": [
{
"pageref": "page_40125",
"startedDateTime": "2012-03-23T16:31:05.716+11:00",
"time": 381,
"request": {
"method": "POST",
"url": "https://duckduckgo.com/",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "duckduckgo.com"
t/firebug_post.t view on Meta::CPAN
"connect": 0,
"send": 0,
"wait": 381,
"receive": 0
},
"serverIPAddress": "184.72.106.52",
"connection": "443"
},
{
"pageref": "page_40125",
"startedDateTime": "2012-03-23T16:31:06.275+11:00",
"time": 760,
"request": {
"method": "GET",
"url": "https://duckduckgo.com/a.js?q=http%20archive%20format&p=1",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "duckduckgo.com"
t/firebug_post.t view on Meta::CPAN
"connect": 0,
"send": 0,
"wait": 760,
"receive": 0
},
"serverIPAddress": "184.72.106.52",
"connection": "443"
},
{
"pageref": "page_40125",
"startedDateTime": "2012-03-23T16:31:06.275+11:00",
"time": 1818,
"request": {
"method": "GET",
"url": "https://duckduckgo.com/d.js?q=http%20archive%20format&l=us-en&p=1&s=0",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "duckduckgo.com"
t/firebug_post.t view on Meta::CPAN
"connect": 723,
"send": 0,
"wait": 1095,
"receive": 0
},
"serverIPAddress": "184.72.106.52",
"connection": "443"
},
{
"pageref": "page_40125",
"startedDateTime": "2012-03-23T16:31:08.319+11:00",
"time": 1330,
"request": {
"method": "GET",
"url": "https://builder.duckduckgo.com/b.js?q=http%20archive%20format",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "builder.duckduckgo.com"
t/httpwatch_cookies_n_cache.t view on Meta::CPAN
"creator" : {
"name" : "HttpWatch Basic",
"version" : "8.1.13"
},
"browser" : {
"name" : "Firefox",
"version" : "11.0.0.4454"
},
"pages" : [
{
"startedDateTime" : "2012-04-04T08:13:50.429+10:00",
"id" : "page_0",
"title" : "Google Account Recovery",
"pageTimings" : {
"_renderStart" : 2928,
"onContentLoad" : 2665,
"onLoad" : 3152
}
}
],
"entries" : [
{
"pageref" : "page_0",
"startedDateTime" : "2012-04-04T08:13:50.429+10:00",
"time" : 1294,
"request" : {
"method" : "GET",
"url" : "https://accounts.google.com/RecoverAccount?service=mail&continue=https%3A%2F%2Fmail.google.com%2Fmail%2F",
"httpVersion" : "HTTP/1.1",
"cookies" : [
{
"name" : "PREF",
"value" : "ID=31245dd052940995:TM=1333416734:LM=1333416734:S=GVCghq5oz8F4iPqS",
"path" : "/",
t/httpwatch_cookies_n_cache.t view on Meta::CPAN
"connect" : 1106,
"send" : 0,
"wait" : 163,
"receive" : 1
},
"serverIPAddress" : "173.194.72.84",
"connection" : "2"
},
{
"pageref" : "page_0",
"startedDateTime" : "2012-04-04T08:13:51.743+10:00",
"time" : 1068,
"request" : {
"method" : "GET",
"url" : "https://www.google.com/accounts/recovery?hl=en&gaps&service=mail&continue=https%3A%2F%2Fmail.google.com%2Fmail%2F",
"httpVersion" : "HTTP/1.1",
"cookies" : [
{
"name" : "PREF",
"value" : "ID=31245dd052940995:TM=1333416734:LM=1333416734:S=GVCghq5oz8F4iPqS",
"path" : "/",
t/httpwatch_cookies_n_cache.t view on Meta::CPAN
"connect" : 318,
"send" : 0,
"wait" : 712,
"receive" : 27
},
"serverIPAddress" : "74.125.237.112",
"connection" : "3"
},
{
"pageref" : "page_0",
"startedDateTime" : "2012-04-04T08:13:52.884+10:00",
"time" : 106,
"request" : {
"method" : "GET",
"url" : "https://www.google.com/accounts/recovery/resources/3135485014-options_bin.js",
"httpVersion" : "HTTP/1.1",
"cookies" : [
{
"name" : "accountrecoverylocale",
"value" : "en",
"path" : "/accounts/recovery",
t/httpwatch_cookies_n_cache.t view on Meta::CPAN
"connect" : -1,
"send" : 0,
"wait" : 31,
"receive" : 59
},
"serverIPAddress" : "74.125.237.112",
"connection" : "3"
},
{
"pageref" : "page_0",
"startedDateTime" : "2012-04-04T08:13:52.885+10:00",
"time" : 103,
"request" : {
"method" : "GET",
"url" : "https://www.google.com/accounts/recovery/resources/2134501236-all-css-kennedy.css",
"httpVersion" : "HTTP/1.1",
"cookies" : [
{
"name" : "accountrecoverylocale",
"value" : "en",
"path" : "/accounts/recovery",
t/httpwatch_cookies_n_cache.t view on Meta::CPAN
"connect" : 55,
"send" : 0,
"wait" : 31,
"receive" : 2
},
"serverIPAddress" : "74.125.237.112",
"connection" : "4"
},
{
"pageref" : "page_0",
"startedDateTime" : "2012-04-04T08:13:52.887+10:00",
"time" : 217,
"request" : {
"method" : "GET",
"url" : "https://ssl.gstatic.com/images/logos/google_logo_41.png",
"httpVersion" : "HTTP/1.1",
"cookies" : [
],
"headers" : [
{
"name" : "Accept",
t/httpwatch_cookies_n_cache.t view on Meta::CPAN
"connect" : 166,
"send" : 0,
"wait" : 31,
"receive" : 3
},
"serverIPAddress" : "74.125.237.143",
"connection" : "5"
},
{
"pageref" : "page_0",
"startedDateTime" : "2012-04-04T08:13:53.087+10:00",
"time" : 170,
"request" : {
"method" : "GET",
"url" : "https://ssl.google-analytics.com/ga.js",
"httpVersion" : "HTTP/1.1",
"cookies" : [
],
"headers" : [
{
"name" : "Accept",
t/httpwatch_cookies_n_cache.t view on Meta::CPAN
"connect" : 92,
"send" : 0,
"wait" : 30,
"receive" : 30
},
"serverIPAddress" : "74.125.237.30",
"connection" : "6"
},
{
"pageref" : "page_0",
"startedDateTime" : "2012-04-04T08:13:53.323+10:00",
"time" : 44,
"request" : {
"method" : "GET",
"url" : "https://ssl.google-analytics.com/__utm.gif?utmwv=5.2.6&utms=1&utmn=1490130873&utmhn=www.google.com&utmcs=UTF-8&utmsr=1920x1200&utmvp=1920x732&utmsc=24-bit&utmul=en-us&utmje=0&utmfl=11.2%20r202&utmdt=Google%20Account%20Rec...
"httpVersion" : "HTTP/1.1",
"cookies" : [
],
"headers" : [
{
"name" : "Accept",
t/httpwatch_cookies_n_cache.t view on Meta::CPAN
"connect" : -1,
"send" : 0,
"wait" : 33,
"receive" : 0
},
"serverIPAddress" : "74.125.237.30",
"connection" : "6"
},
{
"pageref" : "page_0",
"startedDateTime" : "2012-04-04T08:13:53.582+10:00",
"time" : 214,
"request" : {
"method" : "GET",
"url" : "https://www.google.com/csi?v=3&s=account_recovery&action=allpages&rt=prt.17,ol.507",
"httpVersion" : "HTTP/1.1",
"cookies" : [
{
"name" : "PREF",
"value" : "ID=31245dd052940995:TM=1333416734:LM=1333416734:S=GVCghq5oz8F4iPqS",
"path" : "/",
t/httpwatch_cookies_n_cache.t view on Meta::CPAN
"dns" : -1,
"connect" : -1,
"send" : 0,
"wait" : 163,
"receive" : 0
},
"serverIPAddress" : "74.125.237.112",
"connection" : "3"
},
{
"startedDateTime" : "2012-04-04T08:13:53.586+10:00",
"time" : 231,
"request" : {
"method" : "GET",
"url" : "https://www.google.com/favicon.ico",
"httpVersion" : "HTTP/1.1",
"cookies" : [
{
"name" : "PREF",
"value" : "ID=31245dd052940995:TM=1333416734:LM=1333416734:S=GVCghq5oz8F4iPqS",
"path" : "/",
t/ie_network_inspector.t view on Meta::CPAN
<creator>
<name>Internet Explorer Network Inspector</name>
<version>10.0.9200.16720</version>
</creator>
<browser>
<name>Internet Explorer</name>
<version>10.0.9200.16720</version>
</browser>
<pages>
<page>
<startedDateTime>2013-10-27T14:47:53.543+00:00</startedDateTime>
<id>0</id>
<title/>
<pageTimings>
<onContentLoad>507</onContentLoad>
<onLoad>688</onLoad>
</pageTimings>
</page>
</pages>
<entries>
<entry>
<pageref>0</pageref>
<startedDateTime>2013-10-27T14:47:53.543+00:00</startedDateTime>
<time>437</time>
<request>
<method>POST</method>
<url>http://127.0.0.1:8080/history</url>
<httpVersion>HTTP/1.1</httpVersion>
<cookies>
<cookie>
<name>s_pers</name>
<value>%20s_fid%3D66B8301EC09E9D87-0B811F10F3FCB850%7C1436988064901%3B%20s_vs%3D1%7C1373917864913%3B%20s_nr%3D1373916064925-New%7C1405452064925%3B</value>
</cookie>
t/ie_network_inspector.t view on Meta::CPAN
</response>
<cache/>
<timings>
<send>0</send>
<wait>422</wait>
<receive>15</receive>
</timings>
</entry>
<entry>
<pageref>0</pageref>
<startedDateTime>2013-10-27T14:47:53.980+00:00</startedDateTime>
<time>0</time>
<request>
<method>GET</method>
<url>http://127.0.0.1:8080/skins/simplyblue/style.css</url>
<httpVersion>HTTP/1.1</httpVersion>
<cookies/>
<headers>
<header>
<name>Accept</name>
<value>text/css</value>
t/ie_network_inspector.t view on Meta::CPAN
</response>
<cache/>
<timings>
<send>0</send>
<wait>0</wait>
<receive>0</receive>
</timings>
</entry>
<entry>
<pageref>0</pageref>
<startedDateTime>2013-10-27T14:47:53.996+00:00</startedDateTime>
<time>0</time>
<request>
<method>GET</method>
<url>http://127.0.0.1:8080/skins/default/magnet.png</url>
<httpVersion>HTTP/1.1</httpVersion>
<cookies/>
<headers>
<header>
<name>Accept</name>
<value>image/png, image/svg+xml, image/*;q=0.8, */*;q=0.5</value>
t/ie_network_inspector.t view on Meta::CPAN
</response>
<cache/>
<timings>
<send>0</send>
<wait>0</wait>
<receive>0</receive>
</timings>
</entry>
<entry>
<pageref>0</pageref>
<startedDateTime>2013-10-27T14:47:53.996+00:00</startedDateTime>
<time>0</time>
<request>
<method>GET</method>
<url>http://127.0.0.1:8080/otto.png</url>
<httpVersion>HTTP/1.1</httpVersion>
<cookies/>
<headers>
<header>
<name>Accept</name>
<value>image/png, image/svg+xml, image/*;q=0.8, */*;q=0.5</value>
t/ie_network_inspector.t view on Meta::CPAN
<creator>
<name>Internet Explorer Network Inspector</name>
<version>9.0.8112.16421</version>
</creator>
<browser>
<name>Internet Explorer</name>
<version>9.0.8112.16421</version>
</browser>
<pages>
<page>
<startedDateTime>2012-04-05T22:33:13.499+01:00</startedDateTime>
<id>0</id>
<title/>
<pageTimings>
<onContentLoad>-1</onContentLoad>
<onLoad>-1</onLoad>
</pageTimings>
</page>
</pages>
<entries>
<entry>
<pageref>0</pageref>
<startedDateTime>2012-04-05T22:33:16.619+01:00</startedDateTime>
<time>3120</time>
<request>
<method>GET</method>
<url>https://apis.live.net/v5.0/me/skydrive/files/testfile8.txt?0=T&1=E&2=S&3=T&method=put&callback=WL.Internal.jsonp.WLAPI_REQ_2_1333665196611&pretty=false&return_ssl_resources=false&access_token=EwAwAq1DBAAUlbRWy...
<httpVersion>HTTP/1.1</httpVersion>
<cookies/>
<headers>
<header>
<name>Accept</name>
<value>application/javascript, */*;q=0.8</value>
t/mandatory_optional.t view on Meta::CPAN
"log": {
"creator": { "comment": "test creator", "_private": "creator" },
"browser": { "comment": "test browser", "_private": "browser" },
"pages": [ {} ]
}
}
_CHECK_
$har->string($checking);
$hash = $har->hashref();
ok($hash, "Successfully read empty page element in har archive");
ok($hash->{log}->{pages}->[0]->{startedDateTime} =~ /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d+\+\d{2}:\d{2}$/smx, "page->startedDateTime is defined as a datetime:$hash->{log}->{pages}->[0]->{startedDateTime}");
ok($hash->{log}->{pages}->[0]->{id} eq 'page_0', "page->id is defined as page_0:$hash->{log}->{pages}->[0]->{id}");
ok(length $hash->{log}->{pages}->[0]->{title}, "page->title is defined:$hash->{log}->{pages}->[0]->{title}");
ok((defined $hash->{log}->{pages}->[0]->{pageTimings} and ref $hash->{log}->{pages}->[0]->{pageTimings} eq 'HASH'), "page->pageTimings is defined as a HASH");
ok($hash->{log}->{browser}->{comment} eq "test browser", "comment is correct");
ok($hash->{log}->{browser}->{_private} eq "browser", "_private value is correct");
$har->browser()->_private("value");
$hash = $har->hashref();
ok($hash->{log}->{browser}->{_private} eq "value", "new _private value is correct (1)");
ok($har->browser()->_private() eq "value", "new _private value is correct (2)");
t/mandatory_optional.t view on Meta::CPAN
{
"log": {
"entries": [ { "comment": "test entry", "_private": "entry", "cache": { "comment": "test cache", "_private": "cache", "beforeRequest": { "comment": "test beforeRequest", "_private": "beforeRequest" }, "afterRequest": null } } ]
}
}
_CHECK_
$har->string($checking);
$hash = $har->hashref();
ok($hash, "Successfully read empty entry element in har archive");
ok($hash->{log}->{entries}->[0]->{startedDateTime} =~ /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d+\+\d{2}:\d{2}$/smx, "entry->startedDateTime is defined as a datetime:$hash->{log}->{entries}->[0]->{startedDateTime}");
foreach my $name (qw(request response cache timings)) {
ok((defined $hash->{log}->{entries}->[0]->{$name} and ref $hash->{log}->{entries}->[0]->{$name} eq 'HASH'), "page->$name is defined as a HASH");
}
ok($hash->{log}->{entries}->[0]->{time} =~ /^\-?\d+$/smx, "entry->time is defined as a number:$hash->{log}->{entries}->[0]->{time}");
(($har->entries())[0])->started_date_time(undef);
$hash = $har->hashref();
ok($hash->{log}->{entries}->[0]->{startedDateTime} eq '0000-00-00T00:00:00.0+00:00', "started_date_time is not defined");
ok($hash->{log}->{entries}->[0]->{comment} eq "test entry", "comment is correct");
ok($hash->{log}->{entries}->[0]->{_private} eq "entry", "_private value is correct");
(($har->entries())[0])->_private(undef);
$hash = $har->hashref();
ok(!exists $hash->{log}->{entries}->[0]->{_private}, "new _private value is correct (2)");
(($har->entries())[0])->_private("value");
$hash = $har->hashref();
ok($hash->{log}->{entries}->[0]->{_private} eq "value", "new _private value is correct (3)");
t/mandatory_optional.t view on Meta::CPAN
$hash = JSON::decode_json($har->string());
ok(!exists $hash->{log}->{pages}->[0]->{_private}, "new _private value is correct (2)");
(($har->pages())[0])->_private("value");
$hash = JSON::decode_json($har->string());
ok($hash->{log}->{pages}->[0]->{_private} eq "value", "new _private value is correct (3)");
ok((($har->pages())[0])->_private() eq "value", "new _private value is correct (4)");
eval { (($har->pages())[0])->does_not_exist() };
ok($@ =~ /^does_not_exist is not specified in the HAR 1.2 spec and does not start with an underscore/, "does_not_exist access throws an exception");
(($har->pages())[0])->started_date_time(undef);
$hash = JSON::decode_json($har->string());
ok($hash->{log}->{pages}->[0]->{startedDateTime} eq '0000-00-00T00:00:00.0+00:00', "started_date_time is not defined");
eval { (($har->pages())[0])->started_date_time("not_formatted") };
ok($@ =~ /^started_date_time is not formatted correctly/, "started_date_time throws an exception with invalid input");
ok($hash->{log}->{pages}->[0]->{pageTimings}->{comment} eq "test pageTimings", "comment is correct");
ok($hash->{log}->{pages}->[0]->{pageTimings}->{_private} eq "pageTimings", "_private is correct");
(($har->pages())[0])->page_timings()->_private(undef);
$hash = JSON::decode_json($har->string());
ok(!exists $hash->{log}->{pages}->[0]->{pageTimings}->{_private}, "new _private value is correct (2)");
(($har->pages())[0])->page_timings()->_private("value");
$hash = JSON::decode_json($har->string());
t/pingdom.t view on Meta::CPAN
#!perl -T
use Test::More tests => 64;
use Archive::Har();
use JSON();
my $har = Archive::Har->new();
my $pingdom_string = '{"log":{"version":"1.2","creator":{"name":"Pingdom Tools","version":"","comment":"Test the load time of a web page at http://tools.pingdom.com/fpt"},"pages":[{"startedDateTime":"2012-03-23T01:22:05.820Z","id":"https://duckduckgo...
ok($har->string($pingdom_string), "Successfully read pingdom har archive for https://duckduckgo.com/?q=http+archive+specification");
ok($har->version() eq '1.2', "INPUT: Pingdom produces a version 1.2 http archive");
ok($har->creator()->name() eq 'Pingdom Tools', "INPUT: Pingdom's creator name is 'Pingdom Tools'");
ok($har->creator()->version() eq '', "INPUT: Pingdom's creator version is the empty string");
ok($har->creator()->comment() eq 'Test the load time of a web page at http://tools.pingdom.com/fpt', "INPUT: Pingdom's creator comment is advertising for Pingdom");
ok(scalar $har->pages() == 1, "INPUT: Pingdom's archive contains 1 page");
my ($firstPage) = $har->pages();
ok($firstPage->started_date_time() eq '2012-03-23T01:22:05.820Z', "INPUT: Pingdom's archive page has a startedDateTime of '2012-03-23T01:22:05.820Z'");
ok($firstPage->id() eq 'https://duckduckgo.com/?q=http+archive+specification', "INPUT: Pingdom's archive page has an id of 'https://duckduckgo.com/?q=http+archive+specification'");
ok($firstPage->title() eq '', "INPUT: Pingdom's archive page has an empty string as the title");
ok($firstPage->page_timings()->on_content_load(-1) == 333, "INPUT: Pingdom's archive page has an onContentLoad of 333");
ok(not(defined $firstPage->page_timings()->on_content_load(undef)), "INPUT: Pingdom's archive page has an onContentLoad that is not defined (after being set to -1)");
ok(not(defined $firstPage->page_timings()->on_content_load(333)), "INPUT: Pingdom's archive page has an onContentLoad that is not defined (after being set to undef");
ok($firstPage->page_timings()->on_load(-1) == 372, "INPUT: Pingdom's archive page has an onLoad of 372");
ok(not(defined $firstPage->page_timings()->on_load(undef)), "INPUT: Pingdom's archive page has an onLoad that is not defined (after being set to -1)");
ok(not(defined $firstPage->page_timings()->on_load(372)), "INPUT: Pingdom's archive page has an onLoad that is not defined (after being set to undef)");
ok(scalar $har->entries() == 46, "INPUT: Pingdom's archive contains 46 entries");
my ($firstEntry) = $har->entries();
ok($firstEntry->pageref() eq 'https://duckduckgo.com/?q=http+archive+specification', "INPUT: Pingdom's archive first entry has a pageref of 'https://duckduckgo.com/?q=http+archive+specification'");
ok($firstEntry->started_date_time() eq '2012-03-23T01:22:05.820Z', "INPUT: Pingdom's archive first entry has a startedDateTime of '2012-03-23T01:22:05.820Z'");
ok($firstEntry->time() == 173, "INPUT: Pingdom's archive first entry has a time of 173");
ok($firstEntry->request()->method() eq 'GET', "INPUT: Pingdom's archive first entry request has a method of 'GET'");
ok($firstEntry->request()->url() eq 'https://duckduckgo.com/?q=http+archive+specification', "INPUT: Pingdom's archive first entry request has a url of 'https://duckduckgo.com/?q=http+archive+specification'");
ok($firstEntry->request()->http_version() eq 'HTTP/1.1', "INPUT: Pingdom's archive first entry request has a version of 'HTTP/1.1'");
ok(scalar $firstEntry->request()->cookies() == 0, "INPUT: Pingdom's archive first entry request has an empty cookie list");
ok(scalar $firstEntry->request()->headers() == 9, "INPUT: Pingdom's archive first entry request has 9 headers");
ok(scalar $firstEntry->timings()->blocked() == 0, "INPUT: Pingdom's archive first entry timings has a blocked value of 0");
ok(not(defined $firstEntry->timings()->dns()), "INPUT: Pingdom's archive first entry timings does not have a defined value for dns");
ok(scalar $firstEntry->timings()->connect() == 125, "INPUT: Pingdom's archive first entry timings has a connect value of 125");
ok(scalar $firstEntry->timings()->send() == 0, "INPUT: Pingdom's archive first entry timings has a send value of 0");
t/pingdom.t view on Meta::CPAN
$firstEntry->timings()->ssl(20);
ok($firstEntry->time() == 174, "INPUT: Pingdom's archive first entry has a time of 174 (after \$entry->timings()->ssl() was set to 20");
$firstEntry->timings()->ssl(19);
ok($firstEntry->time() == 173, "INPUT: Pingdom's archive first entry has a time of 173 (after \$entry->timings()->ssl() was reset to 19");
my $pingdom_ref = JSON::decode_json("$har");
ok($pingdom_ref->{log}->{version} eq '1.2', "OUTPUT: Pingdom produces a version 1.2 http archive");
ok($pingdom_ref->{log}->{creator}->{name} eq 'Pingdom Tools', "OUTPUT: Pingdom's creator name is 'Pingdom Tools'");
ok($pingdom_ref->{log}->{creator}->{version} eq '', "OUTPUT: Pingdom's creator version is the empty string");
ok($pingdom_ref->{log}->{creator}->{comment} eq 'Test the load time of a web page at http://tools.pingdom.com/fpt', "OUTPUT: Pingdom's creator comment is advertising for Pingdom");
ok(scalar @{$pingdom_ref->{log}->{pages}} == 1, "OUTPUT: Pingdom's archive contains 1 page");
ok($pingdom_ref->{log}->{pages}->[0]->{startedDateTime} eq '2012-03-23T01:22:05.820Z', "OUTPUT: Pingdom's archive page has a startedDateTime of '2012-03-23T01:22:05.820Z'");
ok($pingdom_ref->{log}->{pages}->[0]->{id} eq 'https://duckduckgo.com/?q=http+archive+specification', "OUTPUT: Pingdom's archive page has an id of 'https://duckduckgo.com/?q=http+archive+specification'");
ok($pingdom_ref->{log}->{pages}->[0]->{title} eq '', "OUTPUT: Pingdom's archive page has an empty string as the title");
ok($pingdom_ref->{log}->{pages}->[0]->{pageTimings}->{onContentLoad} == 333, "OUTPUT: Pingdom's archive page has an onContentLoad of 333");
$firstPage->page_timings()->on_content_load(undef);
$pingdom_ref = $har->hashref();
ok($pingdom_ref->{log}->{pages}->[0]->{pageTimings}->{onContentLoad} == -1, "OUTPUT: Pingdom's archive page has an onContentLoad of -1 after being set to undef");
$firstPage->page_timings()->on_content_load('-1');
$pingdom_ref = $har->hashref();
ok($pingdom_ref->{log}->{pages}->[0]->{pageTimings}->{onContentLoad} == -1, "OUTPUT: Pingdom's archive page has an onContentLoad of -1 after being set to '-1'");
ok($pingdom_ref->{log}->{pages}->[0]->{pageTimings}->{onLoad} == 372, "OUTPUT: Pingdom's archive page has an onLoad of 372");
$firstPage->page_timings()->on_load(undef);
$pingdom_ref = $har->hashref();
ok($pingdom_ref->{log}->{pages}->[0]->{pageTimings}->{onContentLoad} == -1, "OUTPUT: Pingdom's archive page has an onContentLoad of -1 after being set to '-1'");
ok($pingdom_ref->{log}->{pages}->[0]->{pageTimings}->{onLoad} == -1, "OUTPUT: Pingdom's archive page has an onLoad of -1 after being set to undef");
$firstPage->page_timings()->on_load("-1");
$pingdom_ref = $har->hashref();
ok($pingdom_ref->{log}->{pages}->[0]->{pageTimings}->{onLoad} == -1, "OUTPUT: Pingdom's archive page has an onLoad of -1 after being set to '-1'");
ok(scalar @{$pingdom_ref->{log}->{entries}} == 46, "OUTPUT: Pingdom's archive contains 46 entries");
ok($pingdom_ref->{log}->{entries}->[0]->{pageref} eq 'https://duckduckgo.com/?q=http+archive+specification', "OUTPUT: Pingdom's archive first entry has a pageref of 'https://duckduckgo.com/?q=http+archive+specification'");
ok($pingdom_ref->{log}->{entries}->[0]->{startedDateTime} eq '2012-03-23T01:22:05.820Z', "OUTPUT: Pingdom's archive first entry has a startedDateTime of '2012-03-23T01:22:05.820Z'");
ok($pingdom_ref->{log}->{entries}->[0]->{time} == 173, "OUTPUT: Pingdom's archive first entry has a time of 173");
ok($pingdom_ref->{log}->{entries}->[0]->{request}->{method} eq 'GET', "OUTPUT: Pingdom's archive first entry request has a method of 'GET'");
ok($pingdom_ref->{log}->{entries}->[0]->{request}->{url} eq 'https://duckduckgo.com/?q=http+archive+specification', "OUTPUT: Pingdom's archive first entry request has a url of 'https://duckduckgo.com/?q=http+archive+specification'");
ok($pingdom_ref->{log}->{entries}->[0]->{request}->{httpVersion} eq 'HTTP/1.1', "OUTPUT: Pingdom's archive first entry request has a httpVersion of 'HTTP/1.1'");
ok(scalar @{$pingdom_ref->{log}->{entries}->[0]->{request}->{cookies}} == 0, "OUTPUT: Pingdom's archive first entry request has an empty cookie list");
ok(scalar @{$pingdom_ref->{log}->{entries}->[0]->{request}->{headers}} == 9, "OUTPUT: Pingdom's archive first entry request has 9 headers");
ok($pingdom_ref->{log}->{entries}->[0]->{timings}->{blocked} == 0, "OUTPUT: Pingdom's archive first entry timings has a blocked value of 0");
ok($pingdom_ref->{log}->{entries}->[0]->{timings}->{dns} == -1, "OUTPUT: Pingdom's archive first entry timings has a dns value of -1");
ok($pingdom_ref->{log}->{entries}->[0]->{timings}->{connect} == 125, "OUTPUT: Pingdom's archive first entry timings has a connect value of 125");
ok($pingdom_ref->{log}->{entries}->[0]->{timings}->{send} == 0, "OUTPUT: Pingdom's archive first entry timings has a send value of 0");