Tartalomjegyzék

< CGI

CGI C nyelven

Szöveg kiírása

index.c
#include <stdio.h>
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:

index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Űrlap</title>
</head>
<body>
 
<form action="fel.cgi" method="get">
    <label>Felhasználónév:</label><input type="text" name="user"><br />
    <label>Jelszó:</label><input type="password" name="pass"><br />
    <input type="submit" value="Bejelentkezés" />
</form>
 
</body>
</html>
fel.c
#include <stdio.h>
#include <stdlib.h>
 
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<br>", user);
	printf("%s<br>", pass);
 
}
gcc -o fel.cgi fel.c

Az apache webszerveren ha az index.html és fel.cgi /var/www/azonositas könyvtárban van:

<Directory /var/www/azonositas>
    Options +ExecCGI
    AddHandler cgi-script .cgi
</Directory>

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

fel.c
#include <stdio.h>
#include <stdlib.h>
 
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<br>\n", getenv("REQUEST_METHOD"));
printf("%s<br>\n", getenv("DOCUMENT_ROOT"));
printf("%s<br>\n", getenv("SCRIPT_NAME"));
printf("%s<br>\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"))
     ;