methode post sur cgi C/C++

methode post sur cgi C/C++ - Programmation

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

Reply

Marsh Posté le 23-09-2001 à 20:59:51   

Reply

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.

Reply

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,

Reply

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

Reply

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>" );
}

Reply

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]

Reply

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

Reply

Marsh Posté le 23-09-2001 à 21:35:30    

while( (!feof(stdin)) ||(x<998) )  
essaye avec
while( (!feof(stdin)) && (x<998) )

Reply

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,

Reply

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);
...

Reply

Marsh Posté le 23-09-2001 à 21:55:33   

Reply

Marsh Posté le 23-09-2001 à 22:04:28    

l input ?! ce que contient la varaible stdin ?!

Reply

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;

Reply

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]

Reply

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 ;)

Reply

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

Reply

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);

Reply

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

Reply

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

Reply

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é

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed