Thread Abfrage von Websites auf der Konsole - Aufbau einer Sitzung
(2 answers)
Opened by PERLScripter at 2015-03-17 18:27
Hallo Leute,
ich habe gerade leider das PW für das Board nicht hier, daher schreibe ich als Guest. Folgendes zur Lage : Bei uns gibt es ein Monotoring - Tool für die Überwachung fehlgeschlagener Messages. Ist dies bei der Verarbeitung der Anfrage eines Systems der Fall, so bekommt diese Message eine spezifische Nummer & eine bestimmte Kategorie. Es also nichts weiter als eine Fehler DB inkl. entspechender Messages. Ich habe leider keine Zugriffe für eine direkte Verbindung zu dieser DB :-( Das wichtigste Features des Monitoring - Tools ist die Erstellung songenannter Exporte, also einer Liste der Fehler - Messages, hier gibt es zahlreiche Settings. Und hier ist genau der Knackpunkt. Das Ziel meines PERL Scripts ist die Abfrage der Websites auf der Konsole bzw. der Inhalte. Habe ich die Ergebnisse, so verarbeite ich diese in PERL, führe so die Exporte aus & speichere diese wieder z. B. in einer Datei. Ich möchte eine reine Realisierung über die Konsole die ist also keine Anfrage für Web - Programmierung :-) Als Erster gibt es die gewohnte Anmeldung. Dies ist der Code der Sub für die Vorbereitung der Anmeldung. Ich definiere hier auch die Parameter : Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 require HTTP::Headers; require HTTP::Request; require HTTP::Response; require LWP::UserAgent; ... sub Monitoring_Anmeldung { # system( "CLS" ); my $Monitoring_Anmeldung_Nutzer = $_[0]; my $Monitoring_Anmeldung_PW = $_[1]; my $Monitoring_Anmeldung_Parameter = "login?username=$Monitoring_Anmeldung_Nutzer&password=$Monitoring_Anmeldung_PW"; # print "$Monitoring_Anmeldung_Parameter_Nutzer" . "\n"; # print "$Monitoring_Anmeldung_Parameter_PW" . "\n"; my ( $Monitoring_Inhalte_POST ) = &Monitoring_Server_POST( $Monitoring_Anmeldung_Parameter ); # ------------------------------------------------- my $Pruefung_Aktive_Sitzung = 'Sie sind bereits angemeldet oder die letzte Session wurde nicht'; my $Pruefung_Falsches_PW = 'Die eingegebene Kombination Benutzername/Kennwort ist falsch.'; if ( $Monitoring_Inhalte_POST =~ /$Pruefung_Aktive_Sitzung/ ) { print "\n"; print "Es gibt eine aktive Sitzung fuer : $Monitoring_Anmeldung_Nutzer" , "\n"; print "\n"; } if ( $Monitoring_Inhalte_POST =~ /$Pruefung_Falsches_PW/ ) { print "\n"; print "Falsches PW bei der Anmeldung !" , "\n"; print "\n"; } # ------------------------------------------------- } Nach erfolgreichem POST auf die angegebene Adresse gibt das Script die Werte über die Variable $Monitoring_Inhalte_POST zurück an die obere Sub & prüft die Inhalte über entsprechende Strings $Pruefung_Falsches_*. Gibt es eine aktive Sitzung, ist das OK. Der nächste Schritt wäre nun ein weiterer Post für die Anzeige der Exporte. Erstmal der restliche Code Der Aufruf der Szb $Monitoring_Server_POST führt den POST auf der Website aus & gibt die Inhalte per return(); zurück. Das ist folgender Code : Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 require HTTP::Headers; require HTTP::Request; require HTTP::Response; require LWP::UserAgent; ... sub Monitoring_Server_POST { my $LWP = LWP::UserAgent -> new; my $Monitoring_URL_Basis = "http://beispiel.de/Monitoring/"; my $Monitoring_URL_Parameter = $_[0]; my $Monitoring_Server_POST = $Monitoring_URL_Basis . $Monitoring_URL_Parameter; my $Monitoring_Anfrage_POST = HTTP::Request -> new( POST => $Monitoring_Server_POST ); $Monitoring_Anfrage_POST -> header( 'content-type' => 'application/json' ); my $Monitoring_Rueckmeldung_POST = $LWP -> request( $Monitoring_Anfrage_POST ); if ( $Monitoring_Rueckmeldung_POST -> is_success ) { my $Monitoring_Inhalte_POST = $Monitoring_Rueckmeldung_POST -> decoded_content; print "POST Rueckmeldung \t : In Ordnung" , "\n"; print "HTTP POST Code \t : " , $Monitoring_Rueckmeldung_POST -> code , "\n"; print "HTTP POST Meldung \t : " , $Monitoring_Rueckmeldung_POST -> message , "\n"; return( "$Monitoring_Inhalte_POST" ); &Anzeige_Exporte(); } else { print "HTTP POST Error Code : ", $Monitoring_Rueckmeldung_POST -> code , "\n"; print "HTTP POST Error Meldung : ", $Monitoring_Rueckmeldung_POST -> message , "\n"; } } Bis zu diesem Punkt läuft das Script ohne Probleme. Allerdings ist der nächste Schritt ja wie gesagt der Aufruf der Exporte - Übersicht, also eine weiterer POST. Wenn ich die Sub &Anzeige_Exporte aufrufe, würde ich also einfach noch einen POST absetzen, also in der Art : Code (perl): (dl
)
1 2 3 my $Monitoring_Anzeige_Exporte = "DefExport2.jsp?NAME=Abfrage"; my ( $Monitoring_Inhalte_POST ) = &Monitoring_Server_POST( $Monitoring_Anzeige_Exporte ); Führe ich die ganze Adresse im IE aus, also http://beispiel.de/Monitoring/DefExport2.jsp?NAME=Abfrage , dann erscheint die Anzeige genau dieses Exports, also was ich im Grunde brauche.Das Ergebnis des Scripts ist, dass ich wieder die Anmeldungsseite des Tools erhalte, Ich vermute, es liegt daran, dass er keine Sitzung aufbaut und bei jedem POST von Neuem alle Parameter abfragt. Ich müsste also eine ständige Verbindung ( Zwischenspeichern ) aufrechterhalten, um die Exporte ausführen zu können. Ich habe bereits mit IO::Socket herum probiert, finde aber keine Lösung : Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 use strict; use warnings; use IO::Socket::INET; my ( $data , $length ); $| = 1; my $Monitoring_Sitzung = new IO::Socket::INET ( PeerAddr => 'beispiel.de' , PeerPort => '80' , Proto => 'tcp' , Blocking => 0 ) or die "ERROR bei Erstellung des Sockets : $ !" , "\n"; print "TCP Verbindung zu Server : ERFOLGREICH !" , "\n"; Ich hoffe, ihr könnt mir helfen. Viele Grüße PERL Scripter modedit Editiert von GwenDragon: Zu weite Einrückungen entfernt Last edited: 2015-03-20 16:55:06 +0100 (CET) |