2017-06-09 3 views
0

Nur eine kurze Frage über die Verwendung von FastCGI. Ich programmiere seit ungefähr einem Monat und es fällt mir sehr schwer, mich mit FastCGI zu beschäftigen.FastCGI und Query Strings (Arbeiten in C)

Grundsätzlich sind hier meine Fragen.

  1. Wie genau kann ich meine Abfragezeichenfolge festlegen?

  2. Ist es etwas, was ich vom Programmierstandpunkt aus "einstellen" kann?

  3. Wenn es etwas ist, das ich einstellen muss, wo würde ich es tun?

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

Der folgende Code gibt immer NULL für getenv(QUERY_STRING).

+0

Normalerweise wird die Abfragezeichenfolge vom Webserver festgelegt. Wenn Sie beispielsweise einen Browser öffnen, richten Sie ihn auf Ihren Webserver und geben Sie eine URL ein, die so aussieht ... (oops), http://my.server.com/?name=fred&gender=male und dann die Abfragezeichenfolge wird das Zeug nach dem Fragezeichen sein. –

+0

@BradS. Vielen Dank, das gibt mir einen Einblick, wo ich anfangen soll. Das ist wahrscheinlich eine dumme Frage, aber wie genau zeige ich es auf meinen Webserver? Ich habe eine Funktion geschrieben, um meine query_string in eine Liste von Name-Wert-Paaren zu parsen, aber das ist nutzlos, wenn ich eine NULL-Zeichenfolge haha ​​halte. – Damian

+0

Ich brauche wirklich mehr Kontext. Ich weiß nicht, ob Sie CGI mit einem Webserver ausführen oder wenn Sie mit der Bibliothek mit einem einfachen Demo-Programm experimentieren. Ich frage mich auch, ob Sie wissen, wie Sie Umgebungsvariablen auf Ihrem Host-Betriebssystem einstellen ... also, beginnen wir mit einem einfachen Hallo-Welt-Programm ... und ersetzen Sie die Zeile, printf ("Hallo, Welt! \ N"); mit, printf ("% s \ n", getenv ("QUERY_STRING")); Wissen Sie, wie Sie das Programm in der Befehlszeile ausführen und die Umgebungsvariable so einstellen, dass das Programm ohne Kompilierung etwas anderes ausgibt? –

Antwort

0

alle Formularvariablen werden von Browser zu http-Server in Query-String (für GET HTTP-Anforderung nicht für POST) übergeben Eine HTML-Seite haben in der Regel HTML-Formular mit verschiedenen Formularvariablen zB

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

Die Der Benutzer füllt das Formular aus und sendet es in der Regel durch Klicken auf die Schaltfläche "Absenden" (dies ist nur eine weitere Formularvariable). Der Browser sendet eine GET-Anfrage an den Webserver mit der URL http://localhost:8888/login.cgi?ID=aa&submit=Submit. localhost: 8888 identifiziert die IP und den Port, auf dem der Webserver läuft, /login.cgi teilt dem Webserver mit, welches CGI die angegebene HTTP-Anfrage liefern soll, Abfragezeichenfolge ist der folgende Text? dh ID = aa & submit = Submit.

Webserver oder (vom Webserver bereitgestellte Bibliothek binden in CGI) analysiert HTTP-Anforderungsdaten einschließlich Abfragezeichenfolge, HTTP-Anforderungsheader und übergibt sie als Umgebungsvariablen an das CGI-Programm. Abfragezeichenfolge wird in der Umgebungsvariablen QUERY_STRING übergeben. Die CGI-Programme sollen diese Werte in ihrer Anwendungslogik verwenden