Précédent   Forum des professionnels en informatique > Systèmes > Windows > IIS
IIS Forum d'entraide serveur Web IIS (Internet Information Services)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/03/2007, 17h59   #1
Invité de passage
 
Inscription : février 2005
Messages : 4
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 4
Points : 1
Points : 1
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++ :
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 :
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 :
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>
zoolook est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 22h09   #2
Membre confirmé
 
Avatar de zzzThibaut
 
Inscription : février 2007
Messages : 223
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : février 2007
Messages : 223
Points : 253
Points : 253
Par défaut Config IIS

Bonjour
Est-tu certains que l'extension CGI accpete bien le verb POST dans ta config de IIS ?
zzzThibaut
zzzThibaut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2007, 11h49   #3
Invité de passage
 
Inscription : février 2005
Messages : 4
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 4
Points : 1
Points : 1
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 ?
zoolook est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2007, 13h27   #4
Membre confirmé
 
Avatar de zzzThibaut
 
Inscription : février 2007
Messages : 223
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : février 2007
Messages : 223
Points : 253
Points : 253
Salut
Tu utilises quelle version d'IIS ?
zzzThibaut
zzzThibaut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2007, 14h35   #5
Invité de passage
 
Inscription : février 2005
Messages : 4
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 4
Points : 1
Points : 1
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.
zoolook est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2007, 00h17   #6
Invité de passage
 
Inscription : février 2005
Messages : 4
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 4
Points : 1
Points : 1
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.
zoolook est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2007, 20h23   #7
Membre du Club
 
Inscription : juin 2006
Messages : 134
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 134
Points : 68
Points : 68
salut,

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

Merci
chm0105 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h11.


 
 
 
 
Partenaires

Hébergement Web