IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Modules Perl Discussion :

Module HTML::Form /erreur


Sujet :

Modules Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Par défaut Module HTML::Form /erreur
    Bonjour,

    Je souhaite effectué une requête via une page d'authentification d'une application en perl et récupérer un champs sur la page suivant la page d'authentification après que celle ci soit validé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    use utils qw($TIMEOUT %ERRORS &print_revision &support &usage);
    use POSIX qw(strftime ctime);
    use Getopt::Long;
    use strict;
    use LWP::UserAgent;
    use HTML::Form;
     my $url ='XXXXXXXXXXXX';
       my $ua = LWP::UserAgent->new();
       #agent => 'Mozilla/4.73 [en] (X11; I; Linux 2.2.16 i686; Nav)' );
     
        # récupère le formulaire la première fois. 
        my $req = HTTP::Request->new( POST => "${url}" );
        # envoie la requête HTTP
        my $res = $ua->request($req);
        die $res->status_line if not $res->is_success;
     
        # récupère le formulaire HTML
        my $form = ( HTML::Form->parse( $res->content, $url ) )[0];
        # on remplit la zone d'input avec "Informatique"
        $form->find_input('useralias')->value("admin");
        $form->find_input('password')->value("admin");
        # on soummet le formulaire ...
        $res = $ua->request( $form->click("submit") );
        die $res->status_line if not $res->is_success;
     
        #résultats dans $res->content
        print $res->content;

    La premiere étape marche sans probleme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $res = $ua->request($req);
    Mais j'ai ensuite une Erreur HTTP 302 au niveau de la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $res = $ua->request( $form->click("submit") );
    Quelqu'un aurait-il une idée?

    EDIT : Interrogation supplémentaire : de cette manière on peut obtenir la page vers laquelle la page d'authentification c'est redirigé?


    Merci d'avance!

  2. #2
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Tu dois pouvoir suivre la redirection à la main, mais autant utiliser les capacités de LWP::UserAgent en surchargeant la méthode redirect_ok() pour qu'elle renvoie 1.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #!/usr/bin/perl
    package MyAgent;
    use base 'LWP::UserAgent';
     
    sub redirect_ok { return 1; }
     
    package main;
    use strict; use warnings;
    use utils qw($TIMEOUT %ERRORS &print_revision &support &usage);
    use POSIX qw(strftime ctime);
    use Getopt::Long;
    use HTML::Form;
    my $url ='XXXXXXXXXXXX';
    my $ua = MyAgent->new();
     
    #...
    --
    Jedaï

    --
    Jedaï

  3. #3
    Membre éclairé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Par défaut
    J'obtiens toujours le même résultat de cette manière.
    Si je connais les deux url => page d'authentification et page d'accueil, ne serait-il pas possible de conserver l'authentification (cookies? variable de session?) afin de pouvoir accéder à la page d'accueil?

    ma problématique étant : Authentification et recherche d'un mot clé sur la page d'accueil.


    Merci d'avance !

  4. #4
    Membre éclairé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Par défaut
    J'ai réussi à trouver la syntaxe qu'il me faut mais j'ai en retour la page d'authentification avec comme message 'invalid user'.

    Le grand mystère est que pour m'identifier j'ai le couple admin/admin que je passe bien en parametre :

    Verification avec $form->dump;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    POST http://XXXXXXXXXXXX.php [login]
      useralias=admin
      password=admin                  (password)
      submit=Login                    (submit)
    Auriez vous une idée d'ou peut provenir mon probleme sachant qu'au niveau du login/mdp j'ai bien saisie les bonnes informations....


    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    my ($login, $mdp, $url, $ua, $reponses, $form);
    $login = 'admin';
    $mdp = 'admin';
    $url = 'http://XXXXXXXXXXXXX.php';
    $ua = LWP::UserAgent->new(
           agent => 'Mozilla/4.0 (compatible; MSIE 6.0)',
           timeout => 10,
           );
    my $reponse = $ua->get($url);
     
    if( $reponse->code == 200) {
        $form= HTML::Form->parse($reponse->content,$url);
        $form->find_input('useralias')->value($login);
        $form->find_input('password')->value($mdp);
    $form->dump;
        $reponse = $ua->request($form->click);
            print $reponse->content."\n";
     if($reponse->content =~ m/admin/) {
            print "OK \n";
        }
        else {
            print "CRITICAL \n";
        }
    }
    else {
        print "CRITICAL ACCES\n";
    }
    exit
    Autant pour moi, j'ai toujours l'erreur 302, qui me bloque au moment de la requete de validation du form

  5. #5
    Membre éclairé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Par défaut
    J'ai trouvé la solution en utilisant une autre librairie Perl : (j'ai passé deux jours a comprendre que ce code ne marchait pas via une application(centreon) si l'on ne spécifiait pas le chemin de la librairie!!!qw(/usr/lib/perl5/site_perl/5.8.8/) en l'occurence...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #! /usr/bin/perl -w -T
     
    use lib qw(/usr/local/nagios/libexec/);
    use utils qw(%ERRORS $TIMEOUT);
    use Getopt::Long;
    require warnings;
    use strict;
    use WWW::Mechanize qw(/usr/lib/perl5/site_perl/5.8.8/);
    no warnings;
     
        my $output="";
        my $statut="";  
        my $mech = WWW::Mechanize->new();
        my $url="http://xxxxxxxxxxxxxxxxxx.php";
     
        # formulaire de login
        #print $url;
        $mech->get($url);
        if($mech->success()){
        # remplissage et validation
        $mech->set_fields(
            useralias => "admin",
            password => "admin",
        );
        $mech->click();
        die $mech->res->status_line() unless $mech->success();
        if($mech->content() =~ m/Host Stats/) {
            $output="OK - Test de connexion\n";
            $statut="OK";
        }
        else {
            $output="KO - Test de connexion\n";
            $statut="CRITICAL";
        }
        }
        else {
           $output="KO - Test de connexion\n";
           $statut="CRITICAL";
        }
    print $output;
    exit $ERRORS{$statut};

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [FORMS] Erreur FRM-40735 et ORA-6508
    Par sourizeante dans le forum Forms
    Réponses: 5
    Dernier message: 27/06/2007, 12h14
  2. Module : HTML::Form
    Par altecad dans le forum Web
    Réponses: 1
    Dernier message: 04/04/2007, 18h15
  3. [Struts]HTML:FORM ET HTML:HIDDEN
    Par zurich dans le forum Struts 1
    Réponses: 6
    Dernier message: 07/02/2005, 23h30
  4. [HTML] Form - champ disabled
    Par freddyboy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 04/11/2004, 12h14
  5. [VB.NET] Appeler une sub public dans un module de form
    Par SergeF dans le forum Windows Forms
    Réponses: 3
    Dernier message: 01/06/2004, 13h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo