Thread Abfrage von Websites auf der Konsole - Aufbau einer Sitzung (2 answers)
Opened by PERLScripter at 2015-03-17 18:27

Gast PERLScripter
 2015-03-17 18:27
#180179 #180179
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)

View full thread Abfrage von Websites auf der Konsole - Aufbau einer Sitzung