use strict; use warnings; use 5.010; use Term::ReadLine; use Getopt::Long; use JSON; my $url = shift; my $format_mode = 'append'; my $format = 'json'; GetOptions( 'm=s' => \$format_mode, 'f=s' => \$format, ); package http::net::console; use MooseX::Net::API; package main; my ($content, $result); my $term = Term::ReadLine->new("http::net::console"); my $prompt = $url . '> '; while (defined(my $in = $term->readline($prompt))) { map { http::net::console->meta->remove_net_api_method($_) } http::net::console->meta->get_all_api_methods(); if ($in =~ /^(GET|DELETE)\s(.*)$/) { my $http_console = http::net::console->new( api_base_url => $url, api_format => $format, api_format_mode => $format_mode ); $http_console->meta->add_net_api_method( 'anonymous', method => $1, path => $2 ); ($content, $result) = $http_console->anonymous; say JSON->new->pretty->encode($content); } elsif ($in =~ /^(POST|PUT)\s(.*)(?:\s(.*))$/) { my $method = $1; my $path = $2; my $data = $3; my $http_console = http::net::console->new( api_base_url => $url, api_format => $format, api_format_mode => $format_mode, ); $http_console->meta->add_net_api_method( 'anonymous', method => $method, path => $path ); $http_console->api_useragent->add_handler( request_prepare => sub { my $request = shift; $request->content($data); } ); ($content, $result) = $http_console->anonymous; say pretty_output($content); } elsif ($in eq 'show headers') { if (defined $result) { map { say $_ . ": " . $result->header($_) } keys %{$result->headers}; say ""; } else { say "no headers to show"; } } elsif ($in eq 'show content') { if (defined $content) { say pretty_output($content); } else { say "no content to show"; } } } sub pretty_output { JSON->new->pretty->encode(shift); }