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

IIS Discussion :

Problème de CGI/IIS/C++


Sujet :

IIS

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Problème de CGI/IIS/C++
    Bonjour à tous,

    Je cherche à faire fonctionner IIS en CGI.
    La méthode GET fonctionne mais pas la méthode POST (cela fonctionne avec Apache, avec le programme d'exemple).

    En fait, le programme cgi est bloqué au niveau de la lecture du flux cin (comme si IIS ne transmettait pas le flux au programme cgi).
    Pour le GET, pas de problème puisque le passage des données est effectuée par des variables d'environnement (méthode différente).

    J'ai fait pas mal de recherches, je ne vois plus, je sèche...
    Si vous avez des idées, je suis preneur.
    Je vous joint mon code d'exemple en C++ ainsi que le code des pages html qui l'appelle (get.html fonctionne, post.html ne fonctionne pas).


    testcgi.cpp :
    Code c++ : 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
    #include "stdafx.h"
    #include "iostream.h"
    #include "stdlib.h"
    #include "string.h"
     
    int main(int argc, char* argv[])
    {
     char buffer [1000] ;
     char *libvar, *libvar2;
     
     cout<<"content-type: text/html \n\n";
     cout<<"<html>\n<head><title>Page de test cgi</title></head>\n";
     cout<<"<body bgcolor =\"#d9d9d9\">\n";
     cout<<"<font color=\"#990000\" size = 20px>\n ";
     
     libvar = getenv ("REQUEST_METHOD") ;
     cout << "METHOD=" << libvar << "\n\n" ;
     
     /*
     si c'est la methode POST, je vais lire les donnees dans le flux cin, 
     si c'est la methode GET,  je vais lire les donnees dans la variable d'environement.
     */
     
     if (strcmp (libvar, "POST") == 0)
     {
        // taille des donnees envoyées  au cgi.
    	libvar2 = getenv ("CONTENT_LENGTH") ;
        cout << "CONTENT_LENGTH=" << libvar2 << "\n\n" ;
     
     
    // C'EST ICI QUE CA BLOQUE... quand je veux lire le flux.
     
        cin.getline (buffer, sizeof (buffer)) ;
     
        cout << "DEBUT BUFFER===>" ;
        cout << buffer ;
    	cout << "<===FIN BUFFER\n\n" ;
     }
     else
     {
    	libvar2 = getenv ("QUERY_STRING") ;	
        cout << "QUERY_STRING=" << libvar2 << "\n\n" ;
     } ;
     
     cout<<"</font>\n</body>\n</html>\n";
     return 0;
    }

    get.html :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <html>
    <head>
    <title>Test</title>
    </head>
    <body>
    <form action="/Scripts/testcgi.cgi">
       Entrez vôtre nom  :  
       <input type = "text" name = "nom">
       <input type="submit" value ="envoi">
    </form>
    </body>
    </html>

    post.html :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <html>
    <head>
    <title>Test</title>
    </head>
    <body>
    <form method="post" action="/Scripts/testcgi.cgi">
       Entrez vôtre nom  :  
       <input type = "text" name = "nom">
       <input type="submit" value ="envoi">
    </form>
    </body>
    </html>

  2. #2
    Membre actif Avatar de zzzThibaut
    Inscrit en
    Février 2007
    Messages
    225
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Février 2007
    Messages : 225
    Points : 278
    Points
    278
    Par défaut Config IIS
    Bonjour
    Est-tu certains que l'extension CGI accpete bien le verb POST dans ta config de IIS ?
    zzzThibaut

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour et merci d'avoir répondu,

    Je crois que oui, voilà ce que j'ai déclaré, est ce la bonne façon de faire ?

    Site web par défaut / Clic droit / Propriétés.
    Onglet "répertoire de base".
    Bouton "configuration".
    Onglet "mappages d'application".
    Bouton "ajouter".

    Exécutable : c:\Inetpub\Scripts\testcgi.exe
    Extension : .cgi
    Verbes : tous les verbes.
    Moteur de script : coché.
    Vérifier l'existence du fichier : coché.

    Peut être y a t'il autre chose à déclarer pour compléter ?

  4. #4
    Membre actif Avatar de zzzThibaut
    Inscrit en
    Février 2007
    Messages
    225
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Février 2007
    Messages : 225
    Points : 278
    Points
    278
    Par défaut
    Salut
    Tu utilises quelle version d'IIS ?
    zzzThibaut

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Cela ne fonctionne pas sur 2 versions de IIS :

    La 5 de Windows 2000 Pro.
    La 6 de Windows 2003 serveur (dans cette version, il y a aussi d'autres choses à déclarer pour qu'au moins le GET fonctionne car version + sécurisé).

    Je n'ai pas essayer en 7.0 avec Vista.

    Merci encore.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonsoir,

    Merci encore à zzzThibaut de m'avoir répondu.
    J'ai trouvé.
    Le getline bloquait car il attendait un cr/lf (comme son nom l'indique).
    Apache envoit le cr/lf mais pas IIS.
    En fait, le getline n'est pas la bonne méthode.
    Il faut lire la variable d'environement CONTENT_LENGTH dans lequel se trouve le nombre d'octets à lire puis les lire avec un getchar ou équivalent (lire le nombre de caractères exacts).

    Zoolook.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 134
    Points : 85
    Points
    85
    Par défaut
    salut,

    Je suis intéressé à créer un script cgi avec du c++ mais je n'y arrive pas. Comment as-tu fait?

    Merci

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

Discussions similaires

  1. Problème Perl CGI
    Par natie_49 dans le forum Web
    Réponses: 2
    Dernier message: 22/02/2007, 10h04
  2. Problème asp et IIS
    Par Monbasinstinct dans le forum IIS
    Réponses: 12
    Dernier message: 14/02/2007, 02h06
  3. problème module CGI.pm(debutant)
    Par Shyboy dans le forum Web
    Réponses: 2
    Dernier message: 13/06/2006, 18h46
  4. Problème dans CGI
    Par pingoo78 dans le forum Web
    Réponses: 4
    Dernier message: 30/05/2006, 20h22
  5. [CGI +IIS] CGI multi-thread?
    Par didier.cabale dans le forum Autres langages pour le Web
    Réponses: 9
    Dernier message: 20/06/2005, 11h48

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