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>
Partager