LINUX.ORG.RU

perl POST


0

0

use warnings;
use LWP::UserAgent;
use strict;


$ua = LWP::UserAgent->new;
$ua->agent ("Mozilla/8.0");

my $req = HTTP::Request->new ('POST','http://localhost/post.pl', [ username => 'test',
subject => 'test', message => 'test']);
$ua->request($req);

Здесь есть ошибка но какая????

ругается так:

Can't call method "clone" on unblessed reference at c:/Perl/site/lib/HTTP/Message.pm line 51.

anonymous

Re: perl POST

если тебе надо запостить мессадж в доску, то так:

Допустим нужно регулярно отправлять на какую-нибдуь доску объявлений данные, причем необходимо заполнить несколько полей и при этом подгружать несколько картинок. Для того, чтобы заполнить текстовые поля name и descr в форме:

<form action="http://www.server.ru/cgi-bin/gbook.pl"; method=post>
<input type=text name=name size=20><br>
<input type=text name=descr size=20><br>
<input type=submit value="Submit"><br>
<input type=reset value="clear">
</form>

нужно написать следующий скрипт(соответствующие значения полей name и descr указаны в квадратных скобках):

#!/usr/bin/perl -w
use HTTP::Request::Common qw(POST);
use LWP::UserAgent;
$ua = LWP::UserAgent->new();
my $req = POST 'http://www.server.su/cgi-bin/gbook.pl',
[ name => 'lalala',
descr => 'aaa'];
print $content = $ua->request($req)->as_string;

Если в форме полей больше, чем в приведенном примере, то их нужно просто перечислить в квадратных скобочках через запятую, причем после поледнего поля запятую ставить не нужно:

my $req = POST 'http://www.server.su/cgi-bin/gbook.pl',
[ name => 'lalala',
email => 'user\@host.ru',
text => qx{
bla-bla-bla
alalalalal hahahaha test

s privetom,
Vasya
}
descr => 'aaa'];

Если необходимо подгрузить помимо текста еще и картинку(картинки), то нужно указать Content_Type => 'form-data':

#!/usr/bin/perl -w
$test = "http://www.server.ru/add.html";;
$file = "test.gif";
use HTTP::Request::Common qw(POST);
use LWP::UserAgent;
use CGI qw(header -no_debug);

my $req = POST $test,
Content_Type => 'form-data',
Content => [
user => 'vasya',
password => '123456',
image => [$file],
href => 'aaaaaaaaaaaa',
profile => '13',
ratio => '333333',
alt => 'Hot News!',
];
my $res = LWP::UserAgent->new->request($req);
print header, $res->is_success ? $res->content : $res->status_line;
print $req->as_string;

если необходимо подгружать одновременно несколько картинок(любое число), без текста, то это описано http://genphys.phys.msu.su/~dmitriyk/perl/modules.shtml#upload или слегка модифицировав POST-запрос:

my $req = POST $test,
Content_Type => 'form-data',
Content => [
user => 'vasya',
password => '123456',
image1 => [$file1],
image2 => [$file2],
image3 => [$file3],
image4 => [$file4],
href => 'aaaaaaaaaaaa',
profile => '13',
ratio => '333333',
alt => 'Hot News!',
];

Вобщем такими методами можно отправлять картинки и/или сообщения через интернет на различные доски объявлений и подобные типы сервисов без участия человека. Так-же неплохо бы найти и прочитать в интернете последнюю версию LWP FAQ by fido7.ru.cgi.perl by Paul Kulchenko (paulclinger@yahoo.com)

vilfred ☆☆ ()
Ответ на: Re: perl POST от vilfred

Re: Re: perl POST

Спасибо большое, за столь подробный ответ.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.