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 )