Варіант 1, Статті, Perl, статті

Нехай ми хочемо послати запит в скрипт endpost.cgi такого вигляду:

endpost.cgi – приймає запит скрипт
#!/usr/bin/perl
use CGI “:standart”;
$query=CGI->new();
print "Content-type: text/html

";
if ($ query-> param ("login") & & $ query-> param ("passwd")) {
if ($ query-> param ("login") eq "gorynych" & &

$ Query-> param ("passwd") eq "gorynych") {
print "дані успішно передані!";
exit;
}
}
$text = $query->param("text");
print << "EOF";
Вкажіть правильний псевдонім і пароль для передачі!
<P>
<FORM Action="/cgi-bin/endpost.cgi" method=post>
<TABLE border=0>
<TR> <TD Valign=top> Введіть текст: </ TD>
<TD> <TEXTAREA Name=text cols=40 rows=5> $ text </ TEXTAREA> </ TD> </ TR>
<TR> <TD Valign=top> Введіть псевдонім: </ TD>
<TD> <INPUT Type=text name=login value=""> </ TD> </ TR>
<TR> <TD Valign=top> Введіть пароль: </ TD>
<TD> <INPUT Type=password name=passwd value=""> </ TD> </ TR> </ TABLE> <BR>
<INPUT Type=submit value="отправіть">
</FORM>
EOF

#end

post.cgi – посилає запит скрипт
#!/usr/bin/perl
$ Text = StrEscaped ("Є багато на світі, друг Горацій,
що й не снилося нашим мудрецям! ");
$url = "http://your.host.com/cgi-bin/endpost.cgi";
$passwd = "gorynych";
$login = "gorynyc";

# Створимо нового Агента користувача
use LWP::UserAgent;
$ua = LWP::UserAgent->new;

my $req = HTTP::Request->new(POST=>$url);
# Вказуємо тип контексту
$req->content_type(“application/x-www-form-urlencoded”);
# Вводимо сам контекст для передачі
$ Req-> content ("text = $ text & login = gorynych & passwd = gorynych");
my $res = $ua->request($req);

# Отримуємо відповідь від виводимо його
print "Content-type: text/html

";
print $res->content;
# Якщо ви хочете отримати повну відповідь, із заголовком HTTP,
# Скористайтеся викликом print $ res-> as_string

# Допоміжні процедури
sub StrEscaped {
# Використовуємо цю процедуру для перетворення
# Переданих символів кирилиці
my ($str)=@_;
$ Str = ~ s / ([^ 0-9A-Za-z ?&=:;])/ sprintf ("%%% x ", ord ($ 1)) / eg;
return $str
}


Нехай Вам потрібно відправити псевдонім і пароль у якусь CGI програму, яка
перевіряє передані значення і повертає 1 у разі успіху і 0 при введенні
некоректні значень.

Модифікуємо наш сценарій:

1. додамо в початок розбір параметрів

use CGI “:standart”;
$query = CGI->new();
# Якщо були передані POST параметри "login" та "passwd"
# Заносимо їх у відповідні змінні
if ($ query-> param ("login") & & $ query-> param ("passwd")) {
$login=$query->param("login");
$passwd=$query->param("passwd");
}
# Вводимо значення, якщо змінні невизначені
$passwd = "user" unless $login;
$login = "passwd" unless $passwd;

use LWP::UserAgent;
$ua = LWP::UserAgent->new;
my $req = HTTP::Request->new(POST=>$url);
$req->content_type(“application/x-www-form-urlencoded”);
$ Req-> content ("text = $ text & login = $ login & passwd = $ passwd");
my $res = $ua->request($req);

замість того, щоб виводити контекст відповіді, ми будемо його перевіряти:
$res = $res->content;
if ($res eq 1) {
print "дані успішно передані!";
} else {
# Повертаємо текст в читаний вигляд
# І виводимо форму для вводу, вказуючи в якості
# Приймаючого сценарію наш новий post.cgi
$text = StrUnescaped($text);
print << "EOF";
Вкажіть правильний псевдонім і пароль для передачі!
<P>
<FORM action="/cgi-bin/post.cgi" method=post>
<TABLE border=0>
<TR> <TD Valign=top> Введіть текст: </ TD>
<TD> <TEXTAREA Name=text cols=40 rows=5> $ text </ TEXTAREA> </ TD> </ TR>
<TR> <TD Valign=top> Введіть псевдонім: </ TD>
<TD> <INPUT Type=text name=login value=""> </ TD> </ TR>
<TR> <TD Valign=top> Введіть пароль: </ TD>
<TD> <INPUT Type=password name=passwd value=""> </ TD> </ TR> </ TABLE> <BR>
<INPUT Type=submit value="отправіть">
</FORM>
EOF

#end
}

sub StrUnescaped {
my ($str)=@_;
$ Str = ~ s /% ([a-fA-F0-9] [a-fA-F0-9]) / pack ("C", hex ($ 1)) / eg;
return $str
}


Зауваження:


"Ледачі люди" використовують модуль HTTP:: Request:: Common, для відправки POST
запиту (він сам оперує заголовками і перетворенням символів і використовує
передустановлений content_type).

Це виглядає так:

use HTTP::Request::Common qw(POST);
use LWP::UserAgent;
$ua = LWP::UserAgent->new;
my $req = POST $url,
[ text => "$text",
login => "$login",
passwd => "$passwd"
];

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*