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

Web Perl Discussion :

Simuler un POST avec PERL


Sujet :

Web Perl

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 41
    Points : 13
    Points
    13
    Par défaut Simuler un POST avec PERL
    Bonjour,
    je cherche à simuler le remplissage d'un formulaire (login & mdp) que j'envairais par POST à /demo/login.do .

    Je m'explique, j'ai le login & mdp dans l'entete HTTP, j'appelle un script perl et je voudrais que ce dernier puisse "forwarder" ce login + mdp à mon application java.

    Ceci me permet de remplacer la page de login qui contenais le formulaire suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <form name="logonForm" method="POST" action="http://localhost:8080/demo/logon.do" target="_parent">
    	<input type="text" name="login" maxlength="128" size="20" value="">
    	<input type="password" name="password" maxlength="128" size="20" value="">
    	<input type="image" src="/demo/images/ok_button.gif" border="0" alt="Ok" title="Log on">
    </form>
    j'ai essayé ca, mais bon, ....

    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
    #!/usr/bin/perl
     
    use LWP::UserAgent;
    $ua = LWP::UserAgent->new;
    $ua->agent("Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.3) Gecko/20061201 Firefox/2.0.0.3 (Ubuntu-feisty)");
     
    use HTTP::Request::Common qw(post);
     
    my $req = (post 'logon.do',
    ["login" => $ENV{HTTP_UID},
    "password" => $ENV{HTTP_PASSWORD}]);
     
    $request = $ua->request($req);
    $content = $request->content;
     
    print "Content-type: text/html\n\n";
    print "<base href=\"h**p://www.target_site_url\">";
    print $content;
    exit;
    merci pour vos remarques

    Aswat

  2. #2
    Expert éminent
    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
    Points : 8 586
    Points
    8 586
    Par défaut
    Je ne suis pas sûr de comprendre, qu'est-ce qui cloche avec ton script ? A part je suppose que 'logon.do' n'est pas suffisant dans le post(), tu devrais mettre l'adresse complète.

    --
    Jedaï

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 41
    Points : 13
    Points
    13
    Par défaut
    En fait, j'ai trouvé ce script sur un site mais je ne comprend pas à quoi sert ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    print "Content-type: text/html\n\n";
    print "<base href=\"h**p://www.target_site_url\">";
    print $content;

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 41
    Points : 13
    Points
    13
    Par défaut
    voici mon script modifié :

    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
    #!/usr/bin/perl
     
    use LWP::UserAgent;
    $ua = LWP::UserAgent->new;
    $ua->agent("Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.3) Gecko/20061201 Firefox/2.0.0.3 (Ubuntu-feisty)");
     
    use HTTP::Request::Common qw(post);
     
    my $req = (post 'http://localhost:8080/demo/logon.do',
    ["login" => "scarter",
    "password" => "sprain"]);
     
    $request = $ua->request($req);
    $content = $request->content;
     
    print "Content-type: text/html\n\n";
    print "<base href=\"h**p://www.target_site_url\">";
    print $content;
    exit;
    #print $cgi->redirect( -location => "http://localhost:8080/demo/.quickSearchPage");
    j'ai l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Wed May 16 11:24:05 2007] [error] "post" is not exported by the HTTP::Request::Common module\nCan't continue after import errors at /opt/apache-tomcat-5.5.23/webapps/demo/index.pl line 7\nBEGIN failed--compilation aborted at /opt/apache-tomcat-5.5.23/webapps/demo/index.pl line 7.\n

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 41
    Points : 13
    Points
    13
    Par défaut
    j'ai un morceau de code qui marche presque :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/usr/bin/perl
     
    use LWP::UserAgent;
    $ua = LWP::UserAgent->new;
     
    my $req = HTTP::Request->new(POST => 'http://localhost:8080/demo/logon.do',
                     [ login => 'scarter',password => 'sprain']);
    $req->content_type('application/x-www-form-urlencoded');
    $req->content('match=www&errors=0');
     
    my $res = $ua->request($req);
    print $res->as_string;
    seulement mon navigateur m'affiche le code de la page et non la page :

    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
    HTTP/1.1 200 OK
    Connection: close
    Date: Wed, 16 May 2007 09:56:55 GMT
    Server: Apache-Coyote/1.1
    Content-Length: 911
    Content-Type: text/html;charset=ISO-8859-1
    Client-Date: Wed, 16 May 2007 09:56:55 GMT
    Client-Peer: 127.0.0.1:8080
    Client-Response-Num: 1
    Link: </demo/css/standard.css>; /="/"; rel="stylesheet"; type="text/css"
    Set-Cookie: JSESSIONID=3B13A43F7AB3DAFDE2D11AE3B698BC41; Path=/demo
    Title: OPIAM Admin - Demo Application
     
     
     
     
    <HTML>
        <HEAD>
            <TITLE>OPIAM Admin - Demo Application</TITLE>
            <LINK rel="stylesheet" type="text/css" href="/demo/css/standard.css" />
        </HEAD>
     
     
     
        <FRAMESET cols="275, *" frameborder="0" framespacing="0">
            <FRAMESET rows="65, *" frameborder="0" framespacing="0">
                <FRAME name="logo" src="/demo/images/newlogo.jpg" marginheight="0" marginwidth="0">
                <FRAME name="leftnav" src="/demo/jsp/tiles/common/login_nav.jsp" marginheight="0" marginwidth="0">
            </FRAMESET>
            <FRAME name="body" src="/demo/jsp/tiles/common/login_body.jsp" marginheight="0" marginwidth="0">
            <NOFRAMES>
                <P>This frameset document contains:
                <UL><LI>Logo
                    <LI>Application tree
                    <LI>Application menu and body
                </UL>
            </NOFRAMES>
        </FRAMESET>
    </HTML>

  6. #6
    Expert éminent
    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
    Points : 8 586
    Points
    8 586
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/usr/bin/perl
     
    use LWP::UserAgent;
    $ua = LWP::UserAgent->new;
     
    my $req = HTTP::Request->new(POST => 'http://localhost:8080/demo/logon.do',
                     [ login => 'scarter',password => 'sprain']);
    $req->content_type('application/x-www-form-urlencoded');
     
    my $res = $ua->request($req);
    my %headers = %{$res->headers};
    print "$_: $headers{$_}\n" for keys %headers;
    print "\n";
    print $res->content;
    --
    Jedaï

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 41
    Points : 13
    Points
    13
    Par défaut
    Jedai, merci pour ta réponse, mais j'ai toujours ca qui s'affiche :

    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
    link: </demo/css/standard.css>; /="/"; rel="stylesheet"; type="text/css"
    connection: close
    set-cookie: JSESSIONID=3380381197507C328A6FC40BBC96800D; Path=/demo
    client-response-num: 1
    date: Wed, 16 May 2007 12:42:26 GMT
    content-length: 911
    client-peer: 127.0.0.1:8080
    client-date: Wed, 16 May 2007 12:42:26 GMT
    content-type: text/html;charset=ISO-8859-1
    server: Apache-Coyote/1.1
    title: OPIAM Admin - Demo Application
     
     
     
     
    <HTML>
        <HEAD>
            <TITLE>OPIAM Admin - Demo Application</TITLE>
            <LINK rel="stylesheet" type="text/css" href="/demo/css/standard.css" />
        </HEAD>
     
     
     
        <FRAMESET cols="275, *" frameborder="0" framespacing="0">
            <FRAMESET rows="65, *" frameborder="0" framespacing="0">
                <FRAME name="logo" src="/demo/images/newlogo.jpg" marginheight="0" marginwidth="0">
                <FRAME name="leftnav" src="/demo/jsp/tiles/common/login_nav.jsp" marginheight="0" marginwidth="0">
            </FRAMESET>
            <FRAME name="body" src="/demo/jsp/tiles/common/login_body.jsp" marginheight="0" marginwidth="0">
            <NOFRAMES>
                <P>This frameset document contains:
                <UL><LI>Logo
                    <LI>Application tree
                    <LI>Application menu and body
                </UL>
            </NOFRAMES>
        </FRAMESET>
    </HTML>
    et non la page elle meme.

    Pourtant si je crée une page comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <form name="logonForm" method="POST" action="http://localhost:8080/demo/logon.do" target="_parent">
    	<input type="text" name="login" maxlength="128" size="20" value="">
    	<input type="password" name="password" maxlength="128" size="20" value="">
    	<input type="image" src="/demo/images/ok_button.gif" border="0" alt="Ok" title="Log on">
    </form>
    ca marche bien. J'aurais pas oublié un truc ?

  8. #8
    Expert éminent
    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
    Points : 8 586
    Points
    8 586
    Par défaut
    A priori je vois guère qu'un problème de configuration du serveur à ce stade... A moins que tu n'utilises pas exactement le script que je t'ai donné (copier-coller ?).

    --
    Jedaï

  9. #9
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 41
    Points : 13
    Points
    13
    Par défaut
    si si exactement le même,
    puis j'ai tenté en rajoutant ca :

    print "Content-type: text/html\n";

    mais rien n'y fait.

  10. #10
    Expert éminent
    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
    Points : 8 586
    Points
    8 586
    Par défaut
    C'est vraiment étrange, parce que moi, même en faisant un simple print() de ce que tu as reçu, j'obtiens bien une page HTML...

    En désespoir de cause, mais tu y perds de l'information (le Cookie entre autre) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/usr/bin/perl
     
    use LWP::UserAgent;
    $ua = LWP::UserAgent->new;
     
    my $req = HTTP::Request->new(POST => 'http://localhost:8080/demo/logon.do',
                     [ login => 'scarter',password => 'sprain']);
    $req->content_type('application/x-www-form-urlencoded');
     
    my $res = $ua->request($req);
    print "Content-Type: text/html\n\n";
    print $res->content;
    --
    Jedaï

  11. #11
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 41
    Points : 13
    Points
    13
    Par défaut
    j'ai besoin du cookie, et visiblement c'est du à une histoire de cookie, mais pas seulement, j'ai fait la modif suivante :

    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
    #!/usr/bin/perl
    #agent LemonLDAP pour protéger l'application OPIAM-demo
     
    use LWP::UserAgent;
    use CGI;
    use Cwd;
    my $dir = getcwd;
     
    my $ua = LWP::UserAgent->new;
     
    my $req = HTTP::Request->new(POST => 'http://opiam.example.com:8585/demo/logon.do');
    $req->content_type('application/x-www-form-urlencoded');
    $req->content('login=scarter&password=sprain');
     
    my $res = $ua->request($req);
    my %headers = %{$res->headers};
     
    my $cgi=CGI->new;
     
    my %cgiHeaders;
    $cgiHeaders{'-type'} = $headers{'Content-Type'} || 'text/html';
    foreach(keys %headers) {
    	next if(/Content-Type/);
    	$cgiHeaders{"-$_"} = $headers{$_};
    }
     
    print $cgi->header(%cgiHeaders);
     
    print $res->content;
    ca ne marche toujours pas, mais à l'aide d'un outil comme tcpmon j'ai remarqué que login et mot de passe n'etaient pas envoyé comme il le faut. Ils étaient dans le header et non dans le corps.

  12. #12
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 41
    Points : 13
    Points
    13
    Par défaut
    Ca y est, j'ai trouvé, en fait le login + mdp devaient etre passé dans le corps du POST pour être récupérés par mon application...

    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
    #!/usr/bin/perl
    #agent LemonLDAP pour protéger l'application OPIAM-demo
     
    use LWP::UserAgent;
    use CGI;
    use Cwd;
    my $dir = getcwd;
    my $ua = LWP::UserAgent->new;
    my $req = HTTP::Request->new(POST => 'http://opiam.example.com:8080/demo/logon.do');
    $req->content_type('application/x-www-form-urlencoded');
     
    # On transmet le login + password de l'utilisateur pour simuler la connection
    $req->content("login=$ENV{HTTP_UID}&password=$ENV{HTTP_PASSWORD}");
    my $res = $ua->request($req);
    my %headers = %{$res->headers};
    my $cgi=CGI->new;
    my %cgiHeaders;
    $cgiHeaders{'-type'} = $headers{'Content-Type'} || 'text/html';
    foreach(keys %headers) {
    	next if(/Content-Type/);
    	$cgiHeaders{"-$_"} = $headers{$_};
    }
    print $cgi->header(%cgiHeaders);
    print $res->content;
    Merci pour ton aide Jedai

Discussions similaires

  1. Connexion a un site Web par POST avec perl ?
    Par SmoZy dans le forum Langage
    Réponses: 6
    Dernier message: 30/06/2014, 17h49
  2. update avec Perl
    Par mimilou dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 18/05/2004, 16h22
  3. Connexion avec Perl
    Par BARBIER dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 05/05/2004, 14h05
  4. faire des graphiques avec Perl
    Par And_the_problem_is dans le forum Modules
    Réponses: 2
    Dernier message: 16/07/2003, 16h08
  5. [reseaux] Comment creer un compte user à partir d'un formul avec perl
    Par oulai_evado dans le forum Programmation et administration système
    Réponses: 4
    Dernier message: 01/10/2002, 19h54

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