Andreas Bierhals: Angeben von EXE als CGI im OmniHttpd Server

Beitrag lesen

Hallo Sven,

ich hatte es weiter unten schon mal erwähnt (in der einen Antwort zu Deinem C-Problem), es fehlt in Deinem Prog zumindest die Zeile

print("Content-Type: text/html\n\n");

bevor weitere html-Ausgaben folgen. Möglich, daß es ohne den Header beim OmniHTTPd trotzdem funktioniert, die meisten anderen Server dagegen werden ihren Dienst verweigern. Ansonsten noch eine Kleinigkeit:

void main()

muß normalerweise "int main(void)" oder in der Kurzschreibweise einfach "main()" heißen, da der Return-Typ von main() immer int ist (ein Programm gibt normalerweise am Ende immer einen integer Return-Code zurück. 0 bedeutet dabei, daß alles ok gelaufen ist, andere Zahlenwerte stehen für einen Fehlercode).

{

»»  printf ("<html><head></head><body>%s\n</body></html>", getenv("QUERY_STRING"));

}

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content="text/html; charset=windows-1252" http-equiv=Content-Type></HEAD>
<BODY></BODY></HTML>

WARUM???

Die Ausgabe läßt sich wie folgt interpretieren: Zunächst mal hat omniHTTPd offenbar das Programm ausgeführt, obwohl es keinen HTTP-Header ausgegeben hat (s.o.). Die Zeilen mit <!DOCTYPE ...> und <META ...> sind offenbar vom Server selbst hinzugefügt worden. Der HTML-Text <body></body></html> deutet darauf hin, daß getenv("QUERY_STRING") einen leeren String bzw. einen Nullpointer zurückgegeben hat. Aus irgendeinem Grund ist also QUERY_STRING bei Dir nicht definiert.
probier doch z.B. mal folgendes (ungetestet):

#include<stdio.h>
#include<stdlib.h>
#include<string.h>   // ich hoffe, das reicht an includes... <g>

main() {
  char *s = getenv("QUERY_STRING");
  
  printf("Content-Type: text/html\n\n<html><body><pre>\n");

if (s==NULL) printf("QUERY_STRING war nicht definiert\n");
  else if (strlen(s)==0) printf("QUERY_STRING ist ein leerer String\n");
  else printf("QUERY_STRING=%s\n", s);

printf("</pre></body></html>\n");
  return 0;
}

Viele Grüße

Andreas Bierhals