website transaction monitor / simple web form
Stanley Hopcroft
Stanley.Hopcroft at IPAustralia.Gov.AU
Sat Feb 8 03:14:42 CET 2003
Dear Sir,
There are a number of approaches for dealing with HTTP transactions/web
forms.
They include your writing wrraper programs to Perl modules that are
congnizant of the transaction structure (ie what to send to what URL and
when).
These modules include
A CPAN
1 WWW::Mechanize
2 WWW::Automate
B SourceForge
1 HTTP::MonkeyWrench
C unpublished
1 Netsaint::Web_Trx
Here's an example plugin using the latter,
use constant Intro =>
'http://external/atmoss/falcon.application_start' ;
use constant ConnectToSearch =>
'http://external/atmoss/Falcon_Users_Cookies.Define_User' ;
use constant MultiSessConn =>
'http://external/atmoss/Falcon_Users_Cookies.Run_Create' ;
use constant Search =>
'http://external/atmoss/Falcon.Result' ;
use constant ResultAbstract =>
'http://external/atmoss/falcon_details.show_tm_details' ;
use constant ResultDetails =>
'http://external/atmoss/Falcon_Details.Show_TM_Details' ;
use constant DeleteSearches =>
'http://external/atmoss/Falcon_Searches.Delete_All_Searches' ;
use constant Int => 'Welcome to ATMOSS' ;
use constant ConnSrch => 'Connect to Trade Mark Search' ;
use constant MltiSess => 'Fill in one or more of the fields
below' ;
use constant Srch => 'Your search request
retrieved\s+\d+\s+match(es)?' ;
use constant ResAbs => 'Trade Mark\s+:\s+\d+' ;
use constant ResDet => ResAbs ;
use constant DelSrch => MltiSess ;
use constant MSC_f => [p_Anon => 'REGISTERED', p_user_type
=> 'Connect to Existing Extract List', p_extID => 'Stanley Hopcroft',
p_password => 'It', p_JS => 'N'] ;
use constant Srch_v => [p_tmno1 => 'tmno'] ;
use constant RA_v => [p_tm_number => 'tmno'] ;
use constant RA_f => [p_detail => 'QUICK', p_rec_all => 1,
p_rec_no => 1, p_search_no => 1, p_ExtDisp => 'D'] ;
use constant RD_v => RA_v ;
use constant RD_f => [p_Detail => 'DETAILED', p_rec_no =>
1, p_search_no => 1, p_ExtDisp => 'D'];
use constant OraFault => 'We were unable to process your
request at this time' ;
use constant URLS => [
{Method => 'GET', Url => Intro, Qs_var => [], Qs_fixed
=> [], Exp => Int, Exp_Fault => OraFault},
{Method => 'GET', Url => ConnectToSearch, Qs_var => [], Qs_fixed
=> [], Exp => ConnSrch,Exp_Fault => OraFault},
{Method => 'POST', Url => MultiSessConn, Qs_var => [], Qs_fixed
=> MSC_f,Exp => MltiSess,Exp_Fault => OraFault},
{Method => 'POST', Url => Search, Qs_var => Srch_v, Qs_fixed
=> [], Exp => Srch, Exp_Fault => OraFault},
{Method => 'GET', Url => ResultAbstract, Qs_var => RA_v, Qs_fixed
=> RA_f, Exp => ResAbs,Exp_Fault => OraFault},
{Method => 'POST', Url => ResultDetails, Qs_var => RD_v, Qs_fixed
=> RD_f, Exp => ResDet,Exp_Fault => OraFault},
{Method => 'POST', Url => DeleteSearches, Qs_var => [], Qs_fixed
=> [], Exp => DelSrch, Exp_Fault => OraFault},
] ;
my (@tmarks, $tmno, $i) ;
@tmarks = @ARGV ? @ARGV : (3, 100092, 200099, 300006, 400075, 500067,
600076, 700066, 800061) ;
$i = @ARGV == 1 ? 0 : int( rand($#tmarks) + 0.5 ) ;
$tmno = $tmarks[$i] ;
my $x = Netsaint::Web_Trx->new( URLS ) ;
my ($rc, $message) = $x->check( {tmno => $tmno}, debug => $debug) ;
print "ATMOSS $message\n" ;
exit($rc ? $ERRORS{'OK'} : $ERRORS{'CRITICAL'}) ;
Easy Peasi: call the constructor with a ref to a hash containing all the
URLs and the data to be sent to each URL, then call the check method.
The hard bit in this case - and it's a pretty big gotcha - is _you_ have
to work out the sequence of URLs sent and the data supplied to each form
(some of which is invisible).
The CPAN modules may be a better bet but this works well for me.
On Fri, Feb 07, 2003 at 11:31:33AM -0800, Richard Gross wrote:
> Wondering what can be done to use Nagios to check
> a simple webform? Maybe some modifiction of the wget that
> checked the hp switches? The opening page has:
>
> <h4><b>Welcome to CommuniGate Pro,<br>
> the <span class="orange">test.net</span> Messaging
> Server!</b> </h4>
> <form method=post enctype="multipart/form-data">
> <table border=0 cellspacing=0 cellpadding=0 width="100%">
> <tr bgcolor="#003333" class="contrast">
> <th NOWRAP align=CENTER> Registered Users </th>
> </tr>
> </table>
> <br>
> <table border=0 cellspacing=0 cellpadding=2>
> <tr>
> <th NOWRAP align=LEFT><font class="colfont"
> color="#cc6600">Login
> Name</font></th>
> <th NOWRAP align=LEFT><font class="colfont"
> color="cc6600">Password</font></th>
> <td></td>
> </tr>
> <tr valign=TOP>
> <td>
> <input name="Username" type=text size=20
> maxlength=255>
> </td>
> <td>
> <input name="Password" type=password size=10
> maxlength=99>
> </td>
> <td>
> <input name="login" type=submit value="Enter">
> </td>
> </tr>
> <tr>
> <td colspan=2></td>
> <td></td>
> </tr>
> </table>
> <p>
> </form>
>
> and would like to supply a username and password to this form,
> then check for a text string INBOX would be all that's required.
>
> I did try the command:
>
> wget -r --http-user=chris at test.net --http-passwd=chris06
> http://webmail.test.net but only got back the index page...
>
> Not really sure how to proceed from here.
>
> richg
>
>
Yours sincerely.
--
------------------------------------------------------------------------
Stanley Hopcroft
------------------------------------------------------------------------
'...No man is an island, entire of itself; every man is a piece of the
continent, a part of the main. If a clod be washed away by the sea,
Europe is the less, as well as if a promontory were, as well as if a
manor of thy friend's or of thine own were. Any man's death diminishes
me, because I am involved in mankind; and therefore never send to know
for whom the bell tolls; it tolls for thee...'
from Meditation 17, J Donne.
-------------------------------------------------------
This SF.NET email is sponsored by:
SourceForge Enterprise Edition + IBM + LinuxWorld = Something 2 See!
http://www.vasoftware.com
More information about the Users
mailing list