DTA-CAB
view release on metacpan or search on metacpan
dta-cab-http-client.perl view on Meta::CPAN
#use Encode qw(encode decode);
use File::Basename qw(basename);
use Getopt::Long qw(:config no_ignore_case);
use Time::HiRes qw(gettimeofday tv_interval);
use IO::File;
use Pod::Usage;
use strict;
##==============================================================================
## DEBUG
##==============================================================================
#do "storable-debug.pl" if (-f "storable-debug.pl");
##==============================================================================
## Constants & Globals
##==============================================================================
##-- program identity
our $prog = basename($0);
our $VERSION = $DTA::CAB::VERSION;
##-- General Options
our ($help,$man,$version,$verbose);
#$verbose = 'default';
##-- Logging options
$DTA::CAB::Logger::defaultLogOpts{rootLevel}='WARN';
$DTA::CAB::Logger::defaultLogOpts{level}='INFO';
##-- Client Options
our $defaultPort = 9099;
our $defaultPath = '/query';
our $serverURL = "http://localhost:${defaultPort}${defaultPath}";
our %clientOpts = (
timeout=>65535, ##-- wait for a *long* time (65535 = 2**16-1 ~ 18.2 hours)
testConnect=>0,
mode => 'xpost',
post => 'urlencoded',
cacheGet=>1,
cacheSet=>1,
);
##-- Analysis & Action Options
our $analyzer = 'default';
our $action = 'document';
our %analyzeOpts = (
headers=>[], ##-- additional HTTP request header+value pairs (e.g. Cache-Control)
);
our $doProfile = undef;
##-- I/O Options
our $inputClass = undef; ##-- default parser class
our $outputClass = undef; ##-- default format class
our $outfile = '-';
our %qfo = (
#encoding => 'UTF-8',
);
our (%ifo,%ofo, $qfmt,$ifmt,$ofmt);
our $bench_iters = 1; ##-- number of benchmark iterations for -bench mode
our $trace_request_file = undef; ##-- trace request to file?
##==============================================================================
## Command-line
GetOptions(##-- General
'help|h' => \$help,
'man' => \$man,
'version|V' => \$version,
##-- Client Options
'server-url|serverURL|server|url|s|u=s' => \$serverURL,
'timeout|T=i' => \$clientOpts{timeout},
'test-connect|tc!' => \$clientOpts{testConnect},
'header|H=s%' => sub { push(@{$analyzeOpts{headers}},@_[1,2]); },
'cache-get|cg!' => \$clientOpts{cacheGet},
'cache-set|cs!' => \$clientOpts{cacheSet},
'cache|cc!' => sub { $clientOpts{cacheGet}=$clientOpts{cacheSet}=$_[1] },
'get' => sub { $clientOpts{mode}='get'; },
'post' => sub { $clientOpts{mode}='post'; },
'multipart|multi!' => sub { $clientOpts{post}=$_[1] ? 'multipart' : 'urlencoded'; },
'xpost' => sub { $clientOpts{mode}='xpost'; },
'xmlrpc' => sub { $clientOpts{mode}='xmlrpc'; },
##-- Analysis Options
'analyzer|a=s' => \$analyzer,
'analysis-option|analyze-option|ao|O=s' => \%analyzeOpts,
'profile|p!' => \$doProfile,
'list|l' => sub { $action='list'; },
'token|t|word|w' => sub { $action='token'; },
'sentence|S' => sub { $action='sentence'; },
'document|d' => sub { $action='document'; },
'data|D' => sub { $action='data'; }, ##-- server-side parsing
'raw|r' => sub { $action='raw'; }, ##-- string args, server-side tokenization & parsing
'rawfile|rf|R' => sub { $action='rawfile'; }, ##-- string args, server-side tokenization & parsing
'bench|b:i' => sub { $action='bench'; $bench_iters=$_[1]; },
##-- I/O
'query-format-class|query-format|qfmt|qfc|qf|qc=s' => \$qfo{class},
'input-format-class|input-format|ifmt|ifc|if|ic=s' => \$ifo{class},
'output-format-class|output-format|ofmt|ofc|of|oc=s' => \$ofo{class},
'format-class|format|fmt|fc=s' => sub { $qfo{class}=$ifo{class}=$ofo{class}=$_[1]; },
##
'query-format-option|query-option|qfo|qo=s' => \%qfo,
'input-format-option|input-option|ifo|io=s' => \%ifo,
'output-format-option|ofo|oo=s' => \%ofo,
'format-option|fo=s%' => sub { $qfo{$_[1]}=$ifo{$_[1]}=$ofo{$_[1]}=$_[2]; },
##
#'query-format-encoding|query-encoding|qfe|qe' => \$qfo{encoding},
#'input-format-encoding|input-encoding|ife|ie=s' => \$ifo{encoding},
#'output-format-encoding|output-encoding|ofe|oe=s' => \$ofo{encoding},
#'format-encoding|encoding|enc|fe=s%' => sub { $qfo{encoding}=$ifo{encoding}=$ofo{encoding}=$_[1]; },
##
'output-format-level|ofl|format-level|fl|output-level|ol|pretty=s' => \$ofo{level},
##-- I/O: output
'format-file|ff|output-file|output|o=s' => \$outfile,
##-- debugging
'trace-request|trace|request|tr=s' => \$trace_request_file, ##-- not implemented here
( run in 1.057 second using v1.01-cache-2.11-cpan-71847e10f99 )