Клиент для LiveJournal.com на Perl — HackZona.Ru

Клиент для LiveJournal.com на Perl

Клиент для LiveJournal.com на Perl

Тип статьи:
Со старой ХакЗоны.
Источник:
Дело было вечером, делать было нечего. И решил я изучить, как отсылаются запросы на livejournal.com для добавления новой записи (потом, может, где-нибудь пригодится). Но, поскольку, информации на эту тему нигде не нашёл, пришлось копаться самому в документации к протоколу.

Итак, из написанного там следовало, что для добавления новой записи нужно всего лишь открыть сокет и послать туда HTTP-запрос. Параметры, которые необходимо было передать, перечислены здесь. Что ж, дело остаётся за малым, сделать HTML-форму и написать Perl-скрипт, который и будет эти самые параметры передавать серверу.

Для начала, чтобы вручную не вводить год/месяц/день/время записи, стоит написать следующий код, чтобы скрипт автоматически получал эти параметры:
# 0 1 2 3 4 5 6 7 8
($sec, $Gmin, $Ghour, $mday, $Gmon, $Gyear, $wday, $yday, $isdst) = localtime;
$Gyear += 1900;
$Gmon+=1;

Затем, подключаем все необходимые модули и объявляем переменные:

use IO::Socket qw(:DEFAULT :crlf);
use CGI;
$c = new CGI;
$year = $c->param(«year»);
$mon = $c->param(«mon»);
$day = $c->param(«day»);
$subject = $c->param(«subject»);
$hour = $c->param(«hour»);
$min = $c->param(«min»);
$event = $c->param(«event»);
$act = $c->param(«act»);


Теперь можно переходить непосредственно к передачи запроса серверу, так как HTML-форму с полями темы сообщения и самим сообщением, я думаю, вы сами сверстаете. Я не буду описывать все передаваемые параметры, о них вы можете узнать тут, покажу лишь код:
if ($act eq «post»)
{
#открываем сокет
my $sock = IO::Socket::INET->new(
PeerAddr => 'www.livejournal.com',
PeerPort => '80',
Proto => 'tcp'
);

#узнаем длину запроса для Content-length:
$l =length(«mode=postevent&user;=USER&auth;_method=
clear&auth;_response=&allowmask;=&auth;_challenge=&password;=PASSWORD
&lineendings;=pc&year;=$year&mon;=$mon&day;=$day&hour;=$hour&min;=$min&event;=$event»);

#отправляем запрос:
print $sock join("" =>
«POST /interface/flat HTTP/1.0»,
«Host: www.livejournal.com»,
«Content-type: application/x-www-form-urlencoded»,
«Content-length: $l»,
"",
«mode=postevent&user;=USER&auth;_method=clear&auth;_response=
&allowmask;=&auth;_challenge=&password;=PASSWORD&lineendings;=pc&year;=$year
&mon;=$mon&day;=$day&hour;=$hour&min;=$min&event;=$event»
);

print <$sock>; #выводит ответ сервера
close($sock);

}

Здесь пароль передается с помощью параметра password обычным текстом, но если вы заботитесь о безопасности, то вам следует использовать альтернативный параметр hpassword, в котором следует указывать MD5-хеш. Остальное, думаю, и так понятно.
Нравится
Не нравится

2 комментария

01:22
re
18:20
zzzz man