[[oktatas:web:cgi|< CGI]]
====== CGI C nyelven ======
* **Szerző:** Sallai András
* Copyright (c) Sallai András, 2012, 2013, 2015, 2017
* Licenc: GNU Free Documentation License 1.3
* Web: http://szit.hu
==== Szöveg kiírása ====
#include
main()
{
printf("Content-Type: text/html; charset=utf-8\n\n");
pritnf("Helló Világ\n\n");
}
Fordítás:
gcc -o index.cgi index.c
==== Űrlapfeldolgozás ====
CGI scripteket írhatunk C nyelven is. Az alábbi példában a kliensoldalról
átküldött felhasználónév és jelszópárost dolgozzuk fel:
Űrlap
#include
#include
main()
{
char *adat;
char *user;
char *pass;
adat = (char*) malloc(256 * sizeof(char));
user = (char*) malloc(256 * sizeof(char));
pass = (char*) malloc(256 * sizeof(char));
printf("Content-type:text/html;charset=utf-8\n\n");
adat = getenv("QUERY_STRING");
user = (char*) strtok(adat, "&");
pass = (char*) strtok(NULL, "&");
printf("%s
", user);
printf("%s
", pass);
}
gcc -o fel.cgi fel.c
Az apache webszerveren ha az index.html és fel.cgi /var/www/azonositas könyvtárban van:
Options +ExecCGI
AddHandler cgi-script .cgi
Böngészőben joska felhasználónevet és titok jelszót beírva és a eredményül a következőt kapjuk:
user=joska pass=titok
==== Űrlap post metódussal ====
#include
#include
main()
{
char *adat;
char *user;
char *pass;
adat = (char*) malloc(4096 * sizeof(char));
user = (char*) malloc(256 * sizeof(char));
pass = (char*) malloc(256 * sizeof(char));
printf("Content-Type: text/html; charset=utf-8\n\n");
//printf("%s%c%c\n", "Content-Type: text/html; charset=utf-8", 13, 10);
char *strLen = getenv("CONTENT_LENGTH");
char *endptr;
int len = strtol(strLen, &endptr, 10);
fread(adat, len, 1, stdin);
user = (char*) strtok(adat, "&");
pass = (char*) strtok(NULL, "&");
printf("%s %s \n\n", user, pass);
}
==== Egyéb változók ====
printf("%s
\n", getenv("REQUEST_METHOD"));
printf("%s
\n", getenv("DOCUMENT_ROOT"));
printf("%s
\n", getenv("SCRIPT_NAME"));
printf("%s
\n", getenv("CONTENT_TYPE"));
REQUEST_URI = /app/showEnv.exe/uploads/dir1/?name=value&name1=value1
PATH_INFO = /uploads/dir1/
QUERY_STRING = name=value&name1=value1
SCRIPT_NAME = /app/showEnv.exe
DOCUMENT_ROOT = C:/Apache2/htdocs
PATH_TRANSLATED = C:\Apache2\htdocs\uploads\dir1
DOCUMENT_ROOT = c:/Apache2/htdocs
REQUEST_METHOD = POST
SCRIPT_FILENAME = c:/Apache2/htdocs/app/showenv.exe
SCRIPT_NAME = /app/showEnv.exe
CONTENT_TYPE = application/x-www-form-urlencoded
CONTENT_LENGTH = 38
QUERY_STRING =
REQUEST_URI = /app/showEnv.exe/uploads/dir1/
PATH_INFO = /uploads/dir1/
PATH_TRANSLATED = c:\Apache2\htdocs\uploads\dir1
==== Metódus vizsgálata ====
if(strcmp(getenv("REQUEST_METHOD"),"GET"))
;