Perl HTTP GET JSON with alarm timeout
Perl
use strict;
use warnings;
use HTTP::Tiny;
use JSON::PP;
sub get_json {
my ($url, %opt) = @_;
my $http = HTTP::Tiny->new(timeout => $opt{timeout} // 5, agent => 'bits/1.0');
my $res = $http->get($url);
die "GET $url failed: $res->{status} $res->{reason}\n" unless $res->{success};
my $data = eval { JSON::PP->new->utf8->decode($res->{content}) };
die "invalid JSON from $url: $@" if $@;
return $data;
}
my $payload = get_json('https://example.com/api.json', timeout => 3);
print ref($payload) eq 'HASH' ? "object\n" : "other\n";