XXX Obsolete
***** infoCopter.com *****

Monitor

mod_perl Recipe

#!/usr/bin/perl -w
use strict;
my $VERSION = '1.00';

###########################################################################
#
# monitor.pl
# --uri www.infocopter.com/diax-intern/ --user diax --pass good1byX
# --uri www.infocopter.com/cgi-bin/wtk_agent.pl --tags monitor-input.txt
# --uri "www.auctionline.ch/public-bin/listitems.dbc?form_language=ger&category=5" --result "NOT,FOR SALE"
# --uri "custhelp.sunrise.ch/cgi-bin/rightnow_de.cfg/php/enduser/std_alp.php"
#
###########################################################################

use CGI qw($SL);
use Fcntl;
use LWP::UserAgent;
use HTTP::Request::Common;
use Getopt::Long;
require MIME::Base64;



####  FORWARD DECLARATIONS & PROTOTYPING
sub Usage ($);
sub Debug ($);
sub Error (%);
sub makeRequest(%);


####  GLOBAL VARIABLES

$| = 1; # Unbuffer

my @getopt_args = (
	'h',		# help
	'uri=s',	# target host & path
	'user=s',	# username
	'pass=s',	# password
	'method=s',	# POST, GET
	'tags=s',	# file, containing hidden tags: key1=value1\nkey2=value2
	'proxy=s',	# proxy host
	'debug' ,	# debug mode for development support
	'proxy_auth=s',	# proxy authorization :
	'result=s',	# result strings, delimited with commas (,)
	'v',		# Verbose mode
);

my %Options;
Getopt::Long::config("noignorecase", "bundling");
Usage "" unless GetOptions(\%Options, @getopt_args);

Usage "Help" if $Options{'h'};

################
####  MAIN  ####
################

print "N1000: Start $0\n" if $Options{'v'};

my ($rc, $res) = makeRequest
	User       => $Options{'user'} ,
	Pass       => $Options{'pass'} ,
	Protocol   => 'http' ,
	URI        => $Options{'uri'};

print "N1003: HTTP code:\t$rc\n";

print qq~
Result is:
${$res}
~ if $Options{'v'};

if ($Options{'result'}) {
	my @occurences = split /,/, $Options{'result'};
	my $f_ERR = 0;
	foreach (@occurences) { $f_ERR = 1 unless ${$res} =~ /$_/; }
	Debug "ERROR = $f_ERR";
}



########################
####  SUB ROUTINES  ####
########################
sub makeRequest (%) {

	my %args = @_;
	my $rc = 0;

	my $User = $args{User} || 'myuser';
	my $Pass = $args{Pass} || 'mypass';

	if ($Options{'debug'}) {
		# ----- debug the following LWP connection
		# Debug "Tracing connection to remote Host...";

		my $eval_code = qq~
			use LWP::Debug qw(+ -conns);
			LWP::Debug::trace("POST $args{URI}");
		~;

		eval $eval_code;
		Error Msg => "E1004" if $@;
	}

	my $ua = LWP::UserAgent->new(agent => "monitor V$VERSION");

	$ua->proxy(['http', 'https'], $Options{'proxy'}) if $Options{'proxy'};

	my $Authorization = 'BASIC ' . MIME::Base64::encode("$User\:$Pass");

	my $Response;
	my $protoURI = $args{Protocol} . '://' . $args{URI};

	if ($Options{'tags'}) {
		my %tags = ();
		open(F, $Options{'tags'}) or Error Msg => "E1006 Could not open '$Options{'tags'}' $!", Exit => 1;
		while() {
			next if /^#/;
			chomp;
			s/[ \t]//g;
			my ($key, $val) = split /\=/;
			$tags{$key} = $val;
		}
		close F;

		foreach (keys %tags) { Debug "$_ = '$tags{$_}'";	}

		Debug "N1010: POST $protoURI";

		$Response = $ua->request(POST $protoURI ,
			Content_Type  => 'form-data',
			Authorization => $Authorization,
			Content => [ %tags ]
			);
	}
	else {
		Debug "N1009: No hidden tags" if $Options{'v'};

		$Options{'method'} ||= 'GET';

		if ($Options{'method'} eq 'POST') {
			Debug "N1006: $Options{'method'} $protoURI\...";
			$Response = $ua->request(POST $protoURI, Authorization => $Authorization);
		}
		else {
			if ($Options{'user'}) {
				$protoURI = $args{Protocol} . '://' . $Options{'user'} . ':' . $Options{'pass'} . '@' . $args{URI};
			}

			Debug "N1008: $Options{'method'}, $protoURI\...";
			my $req = HTTP::Request->new('GET', $protoURI);
			$Response = $ua->request($req);
		}
	}

	$rc = $Response->code();

	Debug "N1005: HTTP string:\t"	. $Response->message();

	if ($Options{'v'}) {
		# debug all return values
		foreach (my $req = $Response->request()) {
			foreach (keys %{$req}) {
				Debug "N1007: '$_' =\t'$req->{$_}'";
			}
		}
	}

	unless ($Response->is_success) {
		# my $Msg = $Response->error_as_HTML;
		Error Msg => "E1000: Could not connect to " . $args{URI};
	}

	my $Result = $Response->content();

	# Remove HTML tags - we're in a DOS shell!
	$Result =~ s/]+>//g;
	$Result =~ s/\{\{META /



 

      
© reto :)