- •Лабораторная работа № 9 Тема: Применение cgi-скриптов
- •1 Сведения из теории
- •Переменные окружения
- •Механизмы приема данных
- •Interface
- •Implementation
- •InParams,aPasswd : string;
- •Var I, l: integer;
- •Var ss, st : string; k : integer;
- •Var parmstring:String;I:Integer;
- •Пример использования метода get
- •Пример использования метода post
- •I:integer;
- •If Not Eof(Input) then begin
- •2.5 Вывод изображений
- •Var s:TfileStream;
- •I: Integer;
- •VarValue: array [0..200] of Char;
- •If (GetEnvironmentVariable (pChar(ReqVar),
- •2.3 Разработайте cgi-программу гостевой книги.
- •Var I, l: integer;
- •Var buffer:array[0..1024] of char;
- •Var ss, st : string;
- •Var k:Integer;
- •Var n:Integer;
- •Var parmstring:String;I:Integer;
- •3 Содержание отчета
- •Контрольные вопросы
- •Литература
Interface
uses SysUtils, Windows, Classes;
procedure Main;
Implementation
var
STR : string;
StdIn, Size, Actual : cardinal;
InParams,aPasswd : string;
const
UserPassword : String = 'MyPass';
// Функция перевода шестнадцетиричного числа
// в десятичное число
function HexToInt(CH : char): integer;
begin Result:=0;
case CH of
'0'..'9': Result:=Ord(CH)-Ord('0');
'A'..'F': Result:=Ord(CH)-Ord('A')+10;
'a'..'f': Result:=Ord(CH)-Ord('a')+10;
end;
end;
// Преобразует символы, записанные из вида URLencoded
function Decode(Value: string): string;
Var I, l: integer;
begin Result:=''; L:=0;
for i := 1 to Length(Value) do
begin
if(Value[i] <> '%') and (Value[i] <> '+') and (L<1) then
begin Result := Result + Value[i]; end
else
begin
if(Value[i] = '+') then
Result := Result + ' '
else if(Value[i] = '%') then
begin
L := 2;
if(i < Length(Value) - 1) then
begin
Result := Result + Chr(HexToInt(Value[i+1]) * 16 +
HexToInt(Value[i+2]));
end;
end
else
Dec(L);
end;
end;
end;
// Функция возвращает значение атрибута заданного в качестве параметра функции из // строки данных считанной из устройства стандартного ввода.
function getvar(varname:string):string;
var
buffer:array[0..1024] of char;
size:integer;
begin
size:=GetEnvironmentVariable(PChar(varname),buffer,sizeof(buffer));
if size=0 then getvar:='' else getvar:=String(buffer);
end;
function ParamByName(Name: string): string;
Var ss, st : string; k : integer;
begin
Result := ''; SS := InParams;
while Length(SS) <> 0 do
begin
K := Pos('&',SS);
if (K <> 0) then begin ST := Copy(SS,1,K-1); SS := Copy(SS,K+1,10000); end
else
begin
ST :=SS; SS:='';
end;
K := Pos('=',ST);
if(K <> 0) then
begin
if(Name = Copy(ST,1,K-1)) then
begin
Result := Decode(Copy(ST,K+1,6000));
end;
end;
end;
end;
procedure Main;
Var parmstring:String;I:Integer;
begin
if getvar('REQUEST_METHOD')='POST' then begin
parmstring:=getvar('CONTENT_LENGTH');
if parmstring<>'' then begin
size:=strtoint(parmstring);
setlength(parmstring,size);
for i:=1 to size do read(parmstring[i]);
end;
end else
parmstring:=getvar('QUERY_STRING');
InParams:=parmstring;
APasswd := ParamByName('paswd');
WriteLn('Content-Type: text/html');
WriteLn; WriteLn;
WriteLn('<HTML><HEAD><TITLE>Идентификация пользователя</TITLE>');
WriteLn('<META http-equiv="Content-Type" content="text/html;'+
' charset=windows-1251">');
WriteLn('</HEAD><BODY>');
if APasswd = UserPassword then
WriteLn('<H1>Успешная идентификация!</H1>')
else
WriteLn('<H1>Пароль введен неверно!</H1>');
WriteLn(parmstring);
WriteLn('</BODY></HTML>');
end;
end.
Возврат результата работы программы в зависимости от введенного пароля:
Рисунок 12 – Возврат результата работы программы в зависимости от введенного пароля
Рисунок 13 – Возврат результата работы программы в зависимости от введенного пароля