2017-06-09 4 views
0

Juste une question rapide sur l'utilisation de FastCGI. Je programme depuis environ un mois et je trouve très difficile de comprendre FastCGI.FastCGI et les chaînes de requête (travaillant en C)

Fondamentalement voici mes questions.

  1. Comment exactement puis-je définir ma chaîne de requête?

  2. Est-ce même quelque chose que je peux "définir" du point de vue de la programmation?

  3. Si c'est quelque chose que je dois définir, où le ferais-je?

code:

while(FCGI_Accept() >= 0) { 

    if (getenv("QUERY_STRING") != NULL) 
    { 
     strcpy(query_string, getenv("QUERY_STRING")); 

     if (query_count == 0) 
     { 
      printf("Content-type: text/html\r\n\r\n"); 
      printf("Query string has no data pairs!\n"); 
      continue; 
     } 
    } 
    else 
    { 
     printf("Content-type: text/html\r\n\r\n"); 
     printf("Query string does not exist!\n"); 
     continue; 
    } 
} 

Le code suivant retourne toujours NULL pour getenv(QUERY_STRING).

+0

Normalement, la chaîne de requête est définie par le serveur Web. Par exemple, si vous ouvrez un navigateur, pointez-le sur votre serveur Web et entrez une URL qui ressemble à ceci ... (oops), http://my.server.com/?name=fred&gender=male puis la chaîne de requête sera le truc après le point d'interrogation. –

+0

@BradS. Merci beaucoup, cela me donne un aperçu de par où commencer. C'est probablement une question stupide, mais comment exactement je le désigne un mon serveur web? J'ai écrit une fonction pour analyser ma query_string dans une liste de paires nom-valeur, mais c'est inutile si je garde une chaîne NULL haha. – Damian

+0

J'ai vraiment besoin de plus de contexte. Je ne sais pas si vous utilisez cgi avec un serveur web ou si vous expérimentez la bibliothèque en utilisant un simple programme de démonstration. Je me demande aussi si vous savez comment définir les variables d'environnement sur votre système d'exploitation hôte ... alors, commençons par un simple programme hello world ... et remplaçons la ligne, printf ("Hello, world! \ N"); avec, printf ("% s \ n", getenv ("QUERY_STRING")); Savez-vous comment exécuter le programme sur la ligne de commande et définir la variable d'environnement afin que le programme imprime quelque chose de différent sans compiler? –

Répondre

0

Toutes les variables de formulaire sont transmis à partir du navigateur vers le serveur http dans la chaîne de requête (GET http demande ne POST) Une page html aura typiquement sous forme de HTML avec différentes variables de formulaire par exemple

<HTML> 

<BODY> 
    <FORM METHOD=GET ACTION="http://localhost:8888/login.cgi"> 
    <input name="ID" type="text"> 
    <input name=submit type="submit" value="Submit"> 

    </FORM> 
</BODY> 
</HTML> 

Le l'utilisateur remplira le formulaire et le soumettra généralement en cliquant sur le bouton soumettre (qui est juste une autre variable de formulaire), le navigateur envoie la requête GET au serveur web identifié par l'URL comme http://localhost:8888/login.cgi?ID=aa&submit=Submit où localhost: 8888 identifie l'ip et le port où webserver fonctionne, /login.cgi indique au serveur web quel cgi va servir la requête http donnée, la chaîne de requête est le texte qui suit? ie ID = aa & submit = Envoyer. Webserver ou (bibliothèque fournie par webserver bind into CGI) analyse les données de requête http, y compris la chaîne de requête, les en-têtes de requête http et les transmet comme variables d'environnement au programme cgi. La chaîne de requête est transmise dans la variable d'environnement QUERY_STRING. Les programmes CGI sont censés utiliser ces valeurs dans leur logique d'application