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

Langage Perl Discussion :

Submit d'un formulaire depuis un script perl


Sujet :

Langage Perl

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Tunisie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 426
    Par défaut Submit d'un formulaire depuis un script perl
    Bonjour,

    je voudrais automatiser le submit d'un formulaire en post method (ajout d'un article) de mon site en passant par un script perl en ouvrant bien sur une session authentifié.

    Si ceci est faisable par un script perl, quel modules dois-je utiliser ?

    Merci

  2. #2
    Mr6
    Mr6 est déconnecté
    Membre émérite

    Homme Profil pro
    Inscrit en
    Septembre 2004
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 608
    Par défaut
    Il te faut LWP et UserAgent

    @+
    Mr6

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Tunisie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 426
    Par défaut
    Ok, merci Mr6, je vais y voir

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Voir aussi HTML::Form et HTTP::Cookies
    C'est ce que j'utilise en ce moment avec les modules donnés par Mr6, avant de migrer vers WWW::Mechanize

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Tunisie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 426
    Par défaut configuration du proxy
    Je voudrais tester ce script :
    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
     
    use strict;
    use LWP::UserAgent;
    my $content;
     
    my $ua = new LWP::UserAgent;
     
    # Various enhancement possibilities:
    # $ua->max_size(100000);  # 100k byte limit
    # $ua->timeout(3);        # 3 sec timeout is default
    $ua->proxy(['http'], '10.0.0.14:8080');  # set proxy
    # $ua->env_proxy()        # load proxy info from environment variables
    # $ua->no_proxy('localhost', 'mycorp.com');   # No proxy for local machines
     
    $ua->agent("Mozilla 3.6.2");  # Or something equally mysterious
     
    my $req = new HTTP::Request GET => 'http://mycorp.com/';
    my $res = $ua->request($req);
     
    if ($res->is_success) 
    {
      $content= $res->content;
    } 
    else 
    {
      die "Could not get content";
    }
    je suis connecté dernière le proxy 10.0.0.14 port:8080, comment le configurer dans le code si dessus qui me génère la sortie suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Proxy must be specified as absolute URI; '10.0.0.14:8080' is not at C:/Documents and Settings/morsi/workspace/perlProject/lwp.pl line 12
    Merci

  6. #6
    Mr6
    Mr6 est déconnecté
    Membre émérite

    Homme Profil pro
    Inscrit en
    Septembre 2004
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 608
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ua->proxy(['http'], 'http://10.0.0.14:8080');  # set proxy
    Ca devrait mieux passer.

    @+
    Mr6

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Tunisie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 426
    Par défaut
    OUI, ça marche maintenant , Merci

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Tunisie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 426
    Par défaut
    J'ai réussi à faire un submit d'un formulaire par ce script :
    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
    42
    43
    44
     
    #!/usr/bin/perl
    # Script to emulate a browser for posting to a 
    #   CGI program with method="POST".
     
    # Specify the URL of the page to post to.
    my $URLtoPostTo = "http://blog.pexiweb.be/demo/form/traitement.php";
     
    # Specify the information to post, the form field name on 
    #   the left of the => symbol and the value on the right.
    my %Fields = (
       "champ" => "Hello World !"   
    );
    # As seen above, "@" must be escaped when quoted.
     
    # If you want to specify a browser name, 
    #   do so between the quotation marks. 
    #   Otherwise, nothing between the quotes.
    my $BrowserName = "This Be Mine";
     
    # It's a good habit to always use the strict module.
    use strict;
     
    # Modules with routines for making the browser.
    use LWP::UserAgent;
    use HTTP::Request::Common;
     
    # Create the browser that will post the information.
    my $Browser = new LWP::UserAgent;
     
    #$Browser->proxy(['http'], 'http://10.0.0.14:8080');
     
    # Insert the browser name, if specified.
    if($BrowserName) { $Browser->agent($BrowserName); }
     
    # Post the information to the CGI program.
    my $Page = $Browser->request(POST $URLtoPostTo,\%Fields);
     
    # Print the returned page (or an error message).
    print "Content-type: text/html\n\n";
    if ($Page->is_success) { print $Page->content; }
    else { print $Page->message; }
     
    # end of script
    comment faire pour que ce submit sera lié à mon login et password du site (un autre site qui nécessite l'authentification ) ?!

    Merci

  9. #9
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Si la session est gérée par des cookies, utilise le module HTTP::Cookies dont j'ai donné l'aide plus haut.
    Si tu veux un exemple d'utilisation, je peux extraire des parties de mon code. Mais c'est assez simple d'usage, il suffit de le lier à l'objet $Browser.

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Tunisie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 426
    Par défaut
    OUI, la session est gérée par des cookies et je voudrais bien un exemple d'utilisation .

    Le cookie en question et sauvegarder via le navigateur Firefox 3.6.2.
    Est ce que je devrais ajouter cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $Browser->agent("Firefox 3.6.2");
    Merci

  11. #11
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Exemple:

    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
    use HTTP::Cookies;
    ...
    my $ua = LWP::UserAgent->new;
    $ua->agent("mybot/$version");
     
    my $cookies = HTTP::Cookies->new(file => $config{"cookie_file"},
    				 autosave => 1,
    				 ignore_discard => 1);
    $ua->cookie_jar($cookies);
    ...
     
        $res = $ua->request( $login_req );
        if ($res->is_success) {
          $cookies->extract_cookies($res);
          print "Logged in.\n";
        } else {
          die "Login failed: ", $res->status_line;
        }
     
    ...

  12. #12
    Mr6
    Mr6 est déconnecté
    Membre émérite

    Homme Profil pro
    Inscrit en
    Septembre 2004
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 608
    Par défaut
    Plus feignant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my $headers = HTTP::Headers->new('Cookie' => ''); #inserer le cookie ici
    my $req = new HTTP::Request('GET',"$url", $headers);
    my $res = $ua->request($req);
    @+
    Mr6

  13. #13
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Faut gérer les cookies dans ce cas ??? Si j'ai bien compris, l'intérêt de HTTP::Cookies, c'est de les extraire et de les renvoyer automatiquement dans le header sans avoir à y travailler...
    Je me trompe ? (j'avoue avoir simplement suivi le tuto sans avoir cherché le pourquoi du comment).

  14. #14
    Mr6
    Mr6 est déconnecté
    Membre émérite

    Homme Profil pro
    Inscrit en
    Septembre 2004
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 608
    Par défaut
    Ben la j'extraie mon cookie, je le colle et basta. Si j'ai plusieurs urls à poster avec ben je me le garde au chaud et c'est toujours le même qui sert.
    Plus concretement j'ai une fonction d'appel à une url, que je paramètre comme je veux en lui filant le cookie de cette façon, si c'est du get/post ou si j'utilise un proxy. Et je l'appelle à tours de bras si le but est de crawler un site entier

    @+
    Mr6

  15. #15
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Ce que je voulais dire, c'est qu'avec le module, la gestion des cookies est transparente, il n'est pas nécessaire de les extraire et de les ajouter, ça se fait "tout seul" (c'est notamment intéressant par le fait que parfois, il y a plusieurs cookies qui définissent une session, me semble-t-il, comme la connexion à un forum).

  16. #16
    Mr6
    Mr6 est déconnecté
    Membre émérite

    Homme Profil pro
    Inscrit en
    Septembre 2004
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 608
    Par défaut
    C'est surtout que j'ai pas pris le temps de tester via le module, faut être honnete

    @+
    Mr6

  17. #17
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Ah, ok. En fait, j'utilisais ta méthode avant, et maintenant, je ne me soucie plus de connaitre les cookies utilisés, de les extraire et de le restituer à la demande. Fait l'essai, et tu devrais trouver une grande facilité d'usage.
    Par ailleurs, tu peux parcourir la liste des cookies actifs sous forme d'un hashage. Intéressant pour savoir rapidement tu as été déconnecté automatiquement par exemple (le cookie n'est plus envoyé). Enfin, il me semble que c'est un moyen de le savoir (parmi d'autres), ou de savoir l'inverse, si tu es encore connecté entre deux exécutions du même script.

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Tunisie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 426
    Par défaut
    comment faire pour afficher mon username et mon passwd stocké dans un cookie nommé cookies.txt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     my $ua =
          LWP::UserAgent->new(
            agent => 'Firefox/3.6.3',
            cookie_jar => HTTP::Cookies->new( file => 'cookies.txt', autosave       => 1,
                ignore_discard => 1));
    Merci

  19. #19
    Mr6
    Mr6 est déconnecté
    Membre émérite

    Homme Profil pro
    Inscrit en
    Septembre 2004
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 608
    Par défaut
    hummm, j'espère qu'il n'y a pas de réponse à cette question

    @+
    Mr6

  20. #20
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Le fichier cookies.txt est un fichier texte associant les noms des cookies avec leur valeur (il est aussi possible d'accéder au contenu des cookies par un déréferencement du hash $cookies->{COOKIES} ... bizarrement, je ne sais pas où j'ai vu cela, vu que ce n'est pas documenté).
    En revanche, le codage des valeurs étant à la discrétion du serveur, le contenu de ces données ne sera pas lisible en clair.
    Par contre, il se peut que lors du remplissage du formulaire de login, tu doives élaborer des champs cachés à partir des données saisies (par codage MD5 par exemple : use Digest::MD5 qw(md5_hex);). Ceci étant réalisé par un script Javascript dans la page HTML, tu devras le retranscrire en perl et remplir les champs adhoc avant de soumettre ton formulaire.

Discussions similaires

  1. Utiliser une DLL depuis un script Perl.
    Par AhyGoon dans le forum Langage
    Réponses: 1
    Dernier message: 07/04/2011, 11h55
  2. appeler un script perl depuis un script perl
    Par wizaord dans le forum Langage
    Réponses: 3
    Dernier message: 21/02/2007, 10h51
  3. lancer un script perl depuis un script perl
    Par minusette dans le forum Langage
    Réponses: 7
    Dernier message: 23/08/2006, 13h03
  4. Réponses: 6
    Dernier message: 23/05/2005, 09h33
  5. [web] lancer page HTML depuis un script perl
    Par lilou0210 dans le forum Web
    Réponses: 7
    Dernier message: 05/11/2004, 17h04

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