NAME

Acme::HTTP - High-level access to Net::HTTP::NB and Net::HTTPS::NB

SYNOPSIS

use Acme::HTTP;

# you can use http:
my $url = "http://perldoc.perl.org/perlfaq5.html";

# ...or, alternatively, use https:
#  $url = "https://metacpan.org/pod/Data::Dumper";

set_redir_max(3); # Max. number of redirections
set_timeout(10);  # Timeout in seconds

my $obj = Acme::HTTP->new($url) || die $@;

my $code = get_code();
my $msg  = get_message();

if ($code eq '404') {
    die "Page '$url' not found";
}
elsif ($code ne '200') {
    die "Page '$url' - Error $code, Msg '$msg'";
}

print "Orig url     = ", $url, "\n";
print "Real url     = ", get_url_act(), "\n";
print "Redirections = ", get_redir_act(), "\n";
print "Length       = ", get_response()->{'Content-Length'} // 0, "\n";
print "\n";

while (1) {
    my $n = $obj->read_entity_body(my $buf, 4096);
    die "read failed: $@" unless defined $n;
    last unless $n;

    print $buf;
}

PARAMETERS

The following parameters can be set in advance:

set_redir_max($count)

Set the maximum number of redirections

set_timeout($sec)

Set the timout in seconds

RETURN VALUES

The following variables are available read-only after new():

get_url_act()

returns the actual url after redirection

get_redir_act()

returns the actual number of redirection that have taken place

get_code()

returns the HTTP status

get_message()

returns the HTTP message

get_response()

returns a hash-reference of the response variables

List of values

In case of a successful new(), the subroutines get_code() and get_message() are usually set as follows:

get_code()    => '200'
get_message() => 'OK'

However, a non-existing address would typically return different values:

get_code()    => '404'
get_message() => 'Not Found'

Here is one sample result of get_response() of an MP3 file:

'Content-Type'   => 'audio/mpeg'
'Content-Length' => '28707232'
'Date'           => 'Sun, 17 Aug 2014 10:53:43 GMT'
'Last-Modified'  => 'Thu, 10 Jul 2014 04:52:52 GMT'
'Accept-Ranges'  => 'bytes'
'Connection'     => 'close'

'Cache-Control'  => 'max-age=2269915'
'ETag'           => '"1404967972"'
'X-HW'           => '1408272823.dop...pa1.c'

...and here is another example result of get_esponse() of a web page:

'Content-Type'   => 'text/html; charset=utf-8'
'Content-Length' => '31569'
'Date'           => 'Sun, 17 Aug 2014 11:02:54 GMT'
'Last-Modified'  => 'Thu, 24 Jul 2014 03:31:45 GMT'
'Accept-Ranges'  => 'bytes'
'Connection'     => 'close'

'Age'            => '0'
'Set-Cookie'     => '...expires=12-Sep-2031...; secure',
'Server'         => 'nginx/0.7.67',
'Vary'           => 'Accept-Encoding,Cookie'
'Via'            => '1.1 varnish',
'X-Cache'        => 'MISS, MISS',
'X-Cache-Hits'   => '0, 0',
'X-Runtime'      => '0.479137'
'X-Served-By'    => 'cache-lo80-LHR, cache-fra1222-FRA',

AUTHOR

Klaus Eichner <klaus03@gmail.com>

COPYRIGHT AND LICENSE

Copyright (C) 2014 by Klaus Eichner

All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the artistic license 2.0, see http://www.opensource.org/licenses/artistic-license-2.0.php