Archive-Har

 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.

t/chrome.t  view on Meta::CPAN

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": "/"
            },

t/chrome.t  view on Meta::CPAN

          "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"
            },

t/chrome.t  view on Meta::CPAN

          "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/"
            },

t/chrome.t  view on Meta::CPAN

          "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/"
            },

t/chrome.t  view on Meta::CPAN

          "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/"
            },

t/chrome.t  view on Meta::CPAN

          "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/"
            },

t/chrome.t  view on Meta::CPAN

          "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...
            },

t/chrome.t  view on Meta::CPAN

          "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/"
            },

t/chrome.t  view on Meta::CPAN

          "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/"
            },

t/chrome.t  view on Meta::CPAN

          "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/"
            },

t/chrome.t  view on Meta::CPAN

          "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/"
            },

t/chrome.t  view on Meta::CPAN

          "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...
            },

t/chrome.t  view on Meta::CPAN

          "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"
            },

t/chrome.t  view on Meta::CPAN

          "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&amp;1=E&amp;2=S&amp;3=T&amp;method=put&amp;callback=WL.Internal.jsonp.WLAPI_REQ_2_1333665196611&amp;pretty=false&amp;return_ssl_resources=false&amp;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");



( run in 0.389 second using v1.01-cache-2.11-cpan-05444aca049 )