methode post sur cgi C/C++ - Programmation
Marsh Posté le 23-09-2001 à 21:03:30
stdin c'est l'entree standard c'est equivalent à un scanf
et pour les cgi c'est la bonne maniere de faire. Le serveur http balance ses infos sur le stdin du cgi.
Marsh Posté le 23-09-2001 à 21:07:23
ok
mais j aimerais savoir ce qu il envoie sur l entrée standard alors, s
surtout que le printf(t) ne renvoie rien,
Marsh Posté le 23-09-2001 à 21:13:01
si le printf n'affiche rien c'est qu'il doit rien y avoir sur le stdin.
Ton cgi c'est bien ton serveur http qui le lance ???
Marsh Posté le 23-09-2001 à 21:21:33
(j utilise PWS de microsoft)
le cgi est executé par ce truc du dessus je pense,
enfin, ca marche pour les autre cgi en general, mais pas pour celui la :
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
char *t;
t=(char*)malloc(1000);
int x=0;
while( (!feof(stdin)) ||(x<998) )
{
*t=fgetc(stdin);
t++;x++;
}
printf("%s%c%c\n","content-type:text/html;char
set=iso-8859-1",13,10);
printf("<HTML><BODY BGCOLOR=\"#FFFFFF\">\n" );
printf(t);
printf("</body></html>" );
}
Marsh Posté le 23-09-2001 à 21:30:08
essaye:
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
char *t;
t=(char*)malloc(1000);
int x=0;
while( (!feof(stdin)) ||(x<998) )
{
*t=fgetc(stdin);
t++;x++;
}
printf("Content-type: text/html\r\n" );
printf("<HTML><BODY BGCOLOR=\"#FFFFFF\">\n" );
printf(t);
printf("</body></html>" );
}
Content-type: text/html\r\n
et un espace entre Content-type: et text
[edtdd]--Message édité par aqwsezsxdr--[/edtdd]
Marsh Posté le 23-09-2001 à 21:32:29
non, ca marche pas mieux
(la ligne que tu as remplacait, marchait dnas mes autres cgi)
le symptome sur celui la
en bas du browser reste affiché : opening http://.......
bizarre vu qu on est en local
Marsh Posté le 23-09-2001 à 21:35:30
while( (!feof(stdin)) ||(x<998) )
essaye avec
while( (!feof(stdin)) && (x<998) )
Marsh Posté le 23-09-2001 à 21:44:16
oups, oui une erreur c etait glissé dnas le cope,
mais meme avec ca, j ai tjrs le meme message,
Marsh Posté le 23-09-2001 à 21:55:33
tu peux recuperer la longueur de l'input par cette methode
char *lenstr = getenv("CONTENT_LENGTH" );
char input[1000];
int len=0;
if(lenstr)
sscanf(lenstr,"%ld",&len);
fgets(input, len+1, stdin);
...
Marsh Posté le 23-09-2001 à 22:08:45
ouep
PS: stdin c'est pas une variable, c'est le nom d'un flux (y'a aussi stdout, c'est ce que tu utilise qd tu fais un printf et le stderr) c'est equivalent à un FILE *stream;
Marsh Posté le 23-09-2001 à 22:26:08
salut,
bon pour la forme post (recup de formulaire par exemple), j'utilse un truc du genre
char input[1000]
lenstr = getenv("CONTENT_LENGTH" );
if((lenstr == NULL) || sscanf(lenstr,"%ld",&len) != 1)
{
erreur = 103;
}
else
{
if((len > 0) && (len < 1000))
{
fgets(input, len+1, stdin);
.....
[edtdd]--Message édité par barbarella--[/edtdd]
Marsh Posté le 23-09-2001 à 23:01:08
salut
encore une fois merci ton scripts marche impeccablement
meme si j ai tjrs pas capté pkoi fgets etait un meilleurs moyen de lire l entrée standard que fgetc
merci
Marsh Posté le 23-09-2001 à 23:07:35
ton cgi reste bloqué dans la boucle while
pour la simple et bonne raison qu'il n'y a pas de caractere fin de fichier transmis par le serveur. Du coup le feof ne passe jamais à true...
Marsh Posté le 23-09-2001 à 23:26:41
ok, c pas con
j ai remarqué que le x<1000 ne permettait pas non plus de sortir,
(pas avant 5 min), alors que si je met juste x<10, ca sort bien du while,
ca affiche <html>..... mais pas le printf(t);
Marsh Posté le 24-09-2001 à 01:31:54
slvn
je ne voudrais pas casser ton élan (a moins que t'ai trouvé un truc) mais la seule manière d'utiliser la méthode POST en html 4.0 c'est d'utiliser la balise <FORM method=, parceque la balise <A ...>..</A> n'accepte pas 'method', en tout cas ça ne fonctionne pas. enfin d'après les essaies et que j'ai fait et des doc dont je dispose.
je viens encore d'essayer avec ie5.5 sp2, est un <A method="post" href="..">...</A> ben ça me renvoie une chaine de longueur zéro
Si t'as un truc dis le de suite . Faut que je vérifie encore une source, mais bon ....
Marsh Posté le 24-09-2001 à 01:41:44
ben non,
le W3C.org semble bien confirmer que HTML 4.01 ne dispose pas d'une spécification 'method ' dans sa balsie <A HREF ..>
Marsh Posté le 24-09-2001 à 18:34:07
je pensais bien utilser post dans les formulaires (c plus pratique lorsqu il s agit d envoyer un mot de passe...)
mais sinon, le coup de "post" dans un lien reste a étudier, c vrai que ca pourrias etre pratique/securisé
Marsh Posté le 23-09-2001 à 20:59:51
je cherche a utiliser la methode post pour passer des parametre de maniere invisible (pas dans l url!) :
j ai trouvé ca:
char temp[1000],*t; t=temp;
while(!feof(stdin)) { *t=fgetc(stdin);t++;}
printf(t);
mais bon, sdtin ?! en plus le cgi a pas l air de marcher des masses....