Справа була ввечері, робити було нічого. І я вирішив вивчити, як надсилаються запити на 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 ; #виводить відповідь сервера
close($sock);

}

Тут пароль передається за допомогою параметра password звичайним текстом, але якщо ви дбаєте про безпеку, то вам слід використовувати альтернативний параметр hpassword, в якому слід вказувати MD5-хеш. Решта, думаю, і так зрозуміло.