Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > Модуль LWP


Автор: s_a_s_h_a 28.9.2004, 16:45
Пипл, помогите. Не получается. Сейчас объясню что.
Вот часть кода, которая работала.

my $h=new HTTP::Headers;
my $REFERER=$ENV{HTTP_REFERER};
my $UA=$ENV{HTTP_USER_AGENT};
$h->referer($REFERER);
my $ua=new LWP::UserAgent;
$ua->agent($UA);
my $req=HTTP::Request->new('',$URL,$h);
my $resp=$ua->request($req);

if($resp->is_success)
{
my $STR1=$resp->content;

Теперь, я вместо 'GET', подсталяю переменную $METHOD, которая
может принимать значения "GET" or "POST" и у меня перестало работать.
Как это исправить?

Автор: korob2001 28.9.2004, 17:12
Ни строки 'GET', ни пременной $METHOD в твоём коде не обнаружил.

Автор: dimes 28.9.2004, 17:13
В фразу "у меня перестало работать" наверное можно вложить очень много смысла... вот только
извлечь очень тяжело.

По 500 ошибке стало вылетать что ли?
посмотри что вернет
$resp->status_line
если ок то глянь в
$resp->as_string();

Автор: s_a_s_h_a 30.9.2004, 14:57
my $h=new HTTP::Headers;
my $REFERER=$ENV{HTTP_REFERER};
my $UA=$ENV{HTTP_USER_AGENT};
$h->referer($REFERER);
my $ua=new LWP::UserAgent;
$ua->agent($UA);
my $req=HTTP::Request->new('GET',$URL,$h); вот здесь
my $resp=$ua->request($req);

if($resp->is_success)
{
my $STR1=$resp->content;

Перестало работать - стало работать неверно (ответы совсем непонятные стали приходить) Ведь, много нельзя методом Get передавать. Правда?

Автор: GoodBoy 30.9.2004, 15:16
Цитата(s_a_s_h_a @ 30.9.2004, 15:57)
много нельзя методом Get передавать. Правда?

Не больше килобайта!

Автор: s_a_s_h_a 30.9.2004, 15:47
В общем, что делать?
Вот примеры ответов, когда вместо 'GET' стоит переменная, которая принимает значения гет или пост

1) Fatal error: No content-type in POST request in Unknown on line 0

2)GIF89a‘яяяяяя!щ,T;

и т.п.

Автор: s_a_s_h_a 30.9.2004, 17:01
Ладно. Поставлю вопрос по другому. Надо "удаленно" заполнить форму,
т.е. по указанному в атрибуте action тега form адресу послать пары name_field=value_field.
Как это сделать с помощью модуля LWP. Мануалы читал (на search.cpan.org в том числе),
поэтому просьба помочь конкретной частью кода, а не посылать меня smile.gif на англицкие сайты
да еще с непонятными экзамплами.

Автор: ElectricalStorm 30.9.2004, 17:21
Код

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


Автор: s_a_s_h_a 30.9.2004, 17:25
А если гет, то заменить пост на гет?

Автор: ElectricalStorm 30.9.2004, 17:29
что значит а если гет ... вы что заполненую форму гетом отправляете ?

Автор: s_a_s_h_a 30.9.2004, 17:44
Иногда в некоторых формах (не у меня) стоит гет.

Автор: ElectricalStorm 30.9.2004, 17:57
Код

 $req = HTTP::Request->new(GET => 'ftp://me:passwd@ftp.some.where.com/');
 $req->header(Accept => "text/html, */*;q=0.1");

Автор: s_a_s_h_a 30.9.2004, 18:00
ElectricalStorm

Я немножко модифицировал ваш код и он не работает, подскажите, пожалуйста,
где я ступил.

push(@QUERIES,"\"$FIELD_NAMES[$i]\" => \"$value\"");

my $req = POST $URL, @QUERIES;

причем в $value хранится значение в шестнадцатеричном формате.

Добавлено @ 18:01
ElectricalStorm, а куда сам запрос вставлять, когда гет?

Автор: ElectricalStorm 30.9.2004, 18:40
вот так попробуйте... я просто протестировать сейчас нсчего не могу так как вебом уже не занимаюсь sad.gif

Код


use LWP;
my $browser;
sub do_POST {
 # Parameters:
 #  the URL,
 #  an arrayref or hashref for the key/value pairs,
 #  and then, optionally, any header lines: (key,value, key,value)
 $browser = LWP::UserAgent->new() unless $browser;
 my $resp = $browser->post(@_);
 return ($resp->content, $resp->status_line, $resp->is_success, $resp)
   if wantarray;
 return unless $resp->is_success;
 return $resp->content;
}



использовать вот так
Код

 my ($content, $message, $is_success) = do_POST(
   'http://babelfish.altavista.com/translate.dyn',
   [ 'urltext' => $text, 'lp' => $language_path, 'enc' => 'utf8' ],
 );
 die "Error in translation $language_path: $message\n"
  unless $is_success;


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)