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 :

CGI : Lancer un script perl à partir d'une page html ou d'un wrapper


Sujet :

Web Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 56
    Par défaut CGI : Lancer un script perl à partir d'une page html ou d'un wrapper
    Bonjour à tous,

    Après plusieur tests je ne trouve pas la résolution à mon probleme.
    Je réalise des scripts afin de récupérer des informations sur les machines virtuelles.
    Mon problème est que je ne sais pas comment executer mon prog et comment passer en parametre l'adresse ip de mon serveur, le nom d'utilisateur et le mdp.
    J'obtiens comme erreur:
    Erreur CGI
    L'application CGI spécifiée n'a pas renvoyé le jeu complet d'en-têtes HTTP.

    IIS est bien configuré, toutes les extensions sont autorisées.


    Mon 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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
     
    #!C:/Perl/bin/perl.exe -w
        #start code
    use strict;
    use warnings;
    use CGI;
    use CGI qw/:standard/;
    use Tk;
    use VMware::VIRuntime;
    use VMware::VILib;
    use cgi-lib.pl
     
    use CGI::Carp qw(fatalsToBrowser);
    print "HTTP/1.0 200 OK\n";
     
    Opts::parse();
    Opts::validate();
    Util::connect();
     
       # print header and start the markup output
        my $q = new CGI;
    print $q->header( "text/html" ),$q->start_html( "hello from perl cgi!" );
     
    print $q->p("=====================================================================");
    print $q->p("       FIND THE NAME AND THE NUMBER OF ALL THE VMs AND HOSTs         ");
    print $q->p("=====================================================================");
     
     
    my $host_views = Vim::find_entity_views(view_type => 'HostSystem');
     
    my $counter = 0;
    print $q->p("Host found: ");
    foreach (@$host_views)  {
    print $q->p("$counter:" . $_->name);
    $counter++;
    						}
    print $q->p("Total Host (Serveur)  = $counter");
    my $sum = 0;
    print $q->p("VM's found: ");
     
    my $vm_views = Vim::find_entity_views(view_type => 'VirtualMachine');
    foreach (@$vm_views)    {
    print $q->p("$sum: " . $_->name);
    $sum++;
                            }
    print $q->p("Total VM (machine virtuelle) = $sum");
    print $q->end_html;
    Util::disconnect();
    Wrapper.pl faisant appelle a la fonction :

    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
     
     
    #!C:/Perl/bin/perl.exe -w
     
    use strict;
    use CGI;
    use warnings;
    use CGI::Carp qw(fatalsToBrowser);
    print "HTTP/1.0 200 OK\n";
     
    my $user="scripts";
    my $server="s15771";
    my $password="shuttle";
     
    #exec("C:/Perl/bin/perl.exe", "C:/perl-scripts/vm_found.pl"); 
    system("C:/perl/bin/perl.exe", "vm_found.pl", "--username=$user", "--password=$password", "--server=$server");
     
     
    #my $prog = qx(C:/perl-scripts/testcgi.pl);
    #print "$prog";
     
     
    #my $output = ``;
    #print my $output;
    exit 0;
    Code ur ma page HTML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
     <p>Nombre total de machines virtuelles</p>
      <form action="http://128.94.201.224/cgi-bin/wrapper.pl" method="post">
      <input type=submit value="EXECUTER">
    </form>
    C'est très urgent.
    Merci pour votre aide.

  2. #2
    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
    Dans Wrapper.pl, tu n'as pas spécifié où trouver vm_found.pl

    Je ne sais pas si ça résoud ton problème... c'est juste une piste.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 56
    Par défaut
    Merci pour ta réponse.

    J'ai corrigé, mais sa ne résoud toujours pas la problème. J'ai le même message d'erreur.

  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
    As-tu pu vérifier que vm_found.pl est bien exécuté (par exemple, en écrivant un message de debug dans un fichier particulier) ?

    Autre chose,
    tu produis ton document HTML dans un script qui écrit ... sur la sortie standard d'un nouveau processus (lancé par system) alors que tu devrais l'écrire sur la sortie standard de Wrapper.pl, exécuté dans le contexte du serveur.

    Au lieu d'utiliser system (qui retourne le status de sortie du processus), utilises qx(), qui retourne la sortie standard du processus créé, et print la, comme ceci :

    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
    #!C:/Perl/bin/perl.exe -w
     
    use strict;
    use CGI;
    use warnings;
    use CGI::Carp qw(fatalsToBrowser);
    print "HTTP/1.0 200 OK\n";
     
    my $user="scripts";
    my $server="s15771";
    my $password="shuttle";
     
    print qx("C:/perl/bin/perl.exe C:/perl-scripts/vm_found.pl --username=$user --password=$password --server=$server");
     
    exit 0;
    Une autre méthode serait d'utiliser "do" :
    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
    #!C:/Perl/bin/perl.exe -w
     
    use strict;
    use CGI;
    use warnings;
    use CGI::Carp qw(fatalsToBrowser);
    print "HTTP/1.0 200 OK\n";
     
    our $user="scripts";
    our $server="s15771";
    our $password="shuttle";
     
    do "C:/perl-scripts/vm_found.pl";
     
    exit 0;
    (en prenant soin de revoir l'usage des paramètres de script qui seraient alors $user, $server et $password, et en ajouter "1;" en dernière ligne de vm_found.pl).

    Je n'ai testé aucune des deux solutions.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 56
    Par défaut
    Merci bcp Philou.

    Vm_found.pl marche correctement sans ajouter la syntax pour le faire marcher en mode CGI.
    J'ai testé les scripts que tu m'as envoyé mais malheureusement sans succès, j'ai toujours le meme message d'erreur.

    Le problème est de trouver un moyen pour que mon script s'exécute tout en se connectant au serveur distant dont les paramètres (donner plus haut) doivent être passés en argument.

    J'ai vu que à la place de faire un formulaire, on pouvait écrire:
    <!--exec cgi="cgi-bin/vm_found.pl -->

  6. #6
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "HTTP/1.0 200 OK\n";
    Cette ligne n'est pas nécessaire, en fait je ne suis pas sûr que le serveur apprécie immensément : tes scripts CGI sont des script CGI ordinaires non, pas des no-parse-headers ? Dans ce cas "$cgi->header()" est suffisant et ta ligne est en erronée.

    --
    Jedaï

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 56
    Par défaut
    Merci pour ta réponse, j'obtiens l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Can't locate VMware/VIRuntime.pm in @INC (@INC contains: LIST C:/Perl/site/lib C:/Perl/lib .) at vm_found.pl line 9.
    BEGIN failed--compilation aborted at vm_found.pl line 9.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 56
    Par défaut
    UP

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 56
    Par défaut
    J'ai réussi à rectifier l'erreur précédente.
    Maintenant j'ai cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    C:\perl-scripts>Undefined subroutine &Opts::parse called at C:/perl-scripts/vm_found.pl line 15.

  10. #10
    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
    Où sont définis les modules Opts et Util ? cgi-lib.pl ?

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 56
    Par défaut
    Merci pour ta réponse, mais je ne sais pas à quoi sert cgi-lib.pl.
    J'ai un souci avec active perl, après avoir téléchargé le module theoryx5 à l'aide du lien http://theoryx5.uwinnipeg.ca/ppms/package.xml, je lance dans l'invite de commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ppm install XML-LibXML
    Et j'obtiens un message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Downloading XML-LibXML-1.65...failed 502 Proxy Error ( Non impl├®ment├®  )
    ppm install failed: 502 Proxy Error ( Non impl├®ment├®  )
    Ceci peut-il avoir un lien avec mon problème d'execution du script ? merci

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 56
    Par défaut
    Bonjour,

    J'arrive maintenant à executer mon script cgi à partir de l'invite de commande sans erreur :
    Je tape :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    C:\perl-scripts>perl vm_found --username=scripts --server=<IP de mon serneur> --password=shuttle
    J'aimerais maintenant pouvoir l'exécuter à partir du wrapper.pl qui ferai appel au script avec les paramètres d'authentifications, mais je ne sais pas quelle commande utiliser. J'en ai essayé plusieurs comme vous pouvez le constater mais sans succès.

    script wrapper.pl :

    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
     
     
    #!/usr/bin/perl
     
    use strict;
    use CGI;
    use warnings;
    use CGI::Carp qw(fatalsToBrowser);
     
    my $user='scripts';
    my $server='128.94.5.223';
    my $password='shuttle';
     
     print qx("C:/perl/bin/perl" "C:/perl-scripts/vm_found.pl --username=$user --server=$server --password=$password");
     
    #perl vm_found.pl --username=$user --password=$password --server=$server;
     
    #$val=`C:/perl-scripts/vm_found.pl --username=$user --password=$password --server=$server`;
    #chomp ($val);
     
    #exec ("C:/Perl/bin/perl"  "C:/perl-scripts" `vm_found.pl --username=$user --server=$server --password=$password`);
    #"C:\\perl-scripts\\testa.pl");  #, "--username=$user", "--server=$server", "--password=$password"); 
    #system("C:\perl/bin/perl.exe", "C:\Perl\site\bin\vm_found.pl", "--username=$user", "--password=$password", "--server=$server");
     
    #my $prog = qx(C:/perl-scripts/testcgi.pl);
    #print "$prog";
     
    #my $output = ``;
    #print my $output;
    #qx(C:\\perl-scripts\\new_free_space.pl --username=$user --password=$password --server=$server --start_entity_name=Pyramide --start_entity_type=Datacenter);
    exit 0;
    Merci de me répondre si quelqu'un a une idée sur le problème.

  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
    As-tu essayé de faire le print dans un fichier texte pour voir s'il est bien exécuté, et ce que contient ce qu'il produit ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    open my $LOG, ">", "c:/perl-scripts/debug.txt";
    print $LOG qw(...);

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

Discussions similaires

  1. [PHP 5.2] Lancer script batch à partir d'une page web
    Par -yasmine- dans le forum Langage
    Réponses: 16
    Dernier message: 23/04/2012, 14h52
  2. lancer script a partir d une page html
    Par nita2006 dans le forum Débuter
    Réponses: 7
    Dernier message: 20/06/2008, 23h09
  3. Appel d'un script js à partir d'une page html
    Par developppez dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 04/06/2008, 20h59
  4. executer perl à partir d une page HTML
    Par blaise4714 dans le forum Web
    Réponses: 1
    Dernier message: 11/01/2008, 09h26
  5. Réponses: 4
    Dernier message: 28/02/2007, 15h24

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