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

 C Discussion :

Faire du CGI en C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Par défaut Faire du CGI en C
    Bonjour, les gars.
    J'aimerais faire du CGI en C. J'ai écrit un code tout simple et ca marche pas. Mon serveur me renvoie un 500 Internal Server Error. Pouvez m'aider svp :

    Code : 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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <X11/Xutil.h>
    #include <X11/Xresource.h>
    #include <X11/Xlib.h>
     
    Display *dpy;
     
    int main(int argc, char *argv[]){
     char *qs;
     
     if (! (dpy = XOpenDisplay(":0.0"))) {
        fprintf(stderr, "%s: dispositif %s injoignable\n", argv[0],
                  XDisplayName(NULL));
        return -1;
      }
      qs = getenv("QUERY_STRING");
      fprintf(stdout,"Content-type: text/html\n\n");
      fprintf(stdout,"<html><head></head><body><p>");
      fprintf(stdout,"Query_String : %s\n",qs);
      fprintf(stdout,"</p></body></html>\n");
     
     
     return 0;
    }

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    J'ai du mal à voir ce que X11 vient faire dans du CGI Web...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre éclairé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    J'ai du mal à voir ce que X11 vient faire dans du CGI Web...
    Salut Médinoc, et merci pour ta réponse . Ce bout de code fait partie d'un jeu que je développe dans le cadre d'un projet à la fac en X11. Dans ce projet, j'aurai à faire à recevoir des requetes HTTP dans ma QUERY_STRING et que je vais envoyer à travers des propriétes (atom) à la fenetre principale de mon jeu.
    Can somebody help me plz !

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Et avec un code plus simple ? Genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include <stdio.h>
    int main(void)
    {
        printf("Hello world\n"); 
        return 0;
    }
    Sinon, avant de se servir de qs, il faut vérifier que c'est valide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      qs = getenv("QUERY_STRING");
      fprintf(stdout,"Content-type: text/html\n\n");
      fprintf(stdout,"<html><head></head><body><p>");
      if(NULL != qs) {
        fprintf(stdout,"Query_String : %s\n",qs);
      } else {
        fprintf(stdout,"INVALID Query_String\n");
      }
    Citation Envoyé par Médinoc Voir le message
    J'ai du mal à voir ce que X11 vient faire dans du CGI Web...
    Déjà vu : ça peut se justifier si le serveur et le client sont sur la même machine, mais c'est tordu.

  5. #5
    Membre éclairé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Par défaut
    Citation Envoyé par mabu Voir le message
    Bonjour,
    Déjà vu : ça peut se justifier si le serveur et le client sont sur la même machine, mais c'est tordu.
    Oui le serveur et le client sont sur la meme machine.

    J'ai essayé ton exemple mais ca ne marche pas.

  6. #6
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par publicStaticVoidMain Voir le message
    J'ai essayé ton exemple mais ca ne marche pas.
    Je suppose que l'exemple fonctionne lorsqu'il est lancé seul.

    Si cela ne fonctionne pas, ce doit être que le serveur http n'arrive pas à lancer le CGI... Est il configuré pour ça ? quel Code html lance le CGI ?

  7. #7
    Membre éclairé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Par défaut
    Je viens de consulter mes logs d'Apache et ca m'affiche ca comme erreur (apres plusieurs exécutions)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    /usr/lib/cgi-bin/relais_lignes.cgi: dispositif  injoignable
    [Thu May 14 16:42:06 2009] [error] [client 127.0.0.1] Premature end of script headers: relais_lignes.cgi
    No protocol specified
    /usr/lib/cgi-bin/relais_lignes.cgi: dispositif  injoignable
    [Thu May 14 16:42:06 2009] [error] [client 127.0.0.1] Premature end of script headers: relais_lignes.cgi
    No protocol specified
    /usr/lib/cgi-bin/relais_lignes.cgi: dispositif  injoignable
    [Thu May 14 16:42:07 2009] [error] [client 127.0.0.1] Premature end of script headers: relais_lignes.cgi
    No protocol specified
    /usr/lib/cgi-bin/relais_lignes.cgi: dispositif  injoignable
    [Thu May 14 16:44:21 2009] [error] [client 127.0.0.1] Premature end of script headers: relais_lignes.cgi
    No protocol specified
    /usr/lib/cgi-bin/relais_lignes.cgi: dispositif  injoignable
    [Thu May 14 16:44:22 2009] [error] [client 127.0.0.1] Premature end of script headers: relais_lignes.cgi
    Quelqu'un aurait-il une idée?

  8. #8
    Invité(e)
    Invité(e)
    Par défaut
    Hum, ton programme s'appelle bien relais_lignes.cgi et est bien situé dans /usr/lib/cgi-bin/ ?

    Sinon, l'extension cgi d'apache est-elle activée ?

    Quel est le code html pour lancer le cgi ?

  9. #9
    Membre éclairé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Par défaut
    Citation Envoyé par mabu Voir le message
    Hum, ton programme s'appelle bien relais_lignes.cgi et est bien situé dans /usr/lib/cgi-bin/ ?

    Sinon, l'extension cgi d'apache est-elle activée ?

    Quel est le code html pour lancer le cgi ?
    Oui l'extension cgi est bine activée et est bien située dans /usr/lib/cgi-bin.
    J'ai un tout petit peu progressé parce que ca m'affiche maintenant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [Thu May 14 17:32:35 2009] [error] [client 127.0.0.1] Premature end of script headers: relais_lignes.cgi
    En fait, je reçois une requete du type :

    http://localhost/cgi-bin/relais_lign...=5&couleur=red.

    Et je dois récupére la valeur 5 et la couleur red. Voici mon code :

    Code : 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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <string.h>
    #include <X11/Xutil.h>
    #include <X11/Xresource.h>
    #include <X11/Xlib.h>
     
    Display *dpy;
     
    int main(int argc, char *argv[]){
     //char *qs;
      int nombre_de_lignes;
      char * couleur;
      char * sender;
      char *qs = getenv("QUERY_STRING"); 
      qs = index(qs, '/') + 1;
      sender = qs;
      qs = index (qs,'=');
      nombre_de_lignes = atoi(qs + 1);
     
      qs += 2;
      qs = index (qs,'=');
      couleur = qs +1; 
      fprintf(stdout,"Content-type: text/html\n\n");
     
      fprintf(stdout, "<html><head></head><body>");
      fprintf(stdout,"<p>Nombre de lignes = %d </p>", nombre_de_lignes); 
      fprintf(stdout,"<p>Couleur = %s </p>", couleur);
      fprintf(stdout,"</body></html>");  
      return 0;
    }

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

Discussions similaires

  1. Faire un CGI en VBS
    Par ner0lph dans le forum VBScript
    Réponses: 6
    Dernier message: 18/06/2010, 22h03
  2. Faire des CGI Delphi, encore d'actualité ?
    Par tipiweb dans le forum Web & réseau
    Réponses: 0
    Dernier message: 22/11/2008, 19h41
  3. Réponses: 1
    Dernier message: 13/05/2006, 10h24
  4. [EasyPHP] Faire tourner des scripts PHP en cgi
    Par Jim_Nastiq dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 19/04/2006, 10h45
  5. [cgi/DOM] Faire d'abord du DOM puis du cgi
    Par chpog dans le forum Web
    Réponses: 2
    Dernier message: 11/07/2005, 17h32

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