Работа с LWP::UserAgent 
|   | Основные вопросы и решения, связанные с модулем LWP (Работа с HTTP/HTTPS) | 
Как получить текстовый файл, используя http или ftp?
use LWP::UserAgent; use CGI qw(header -no_debug); my $URL = 'http://www.yahoo.com/'; my $res = LWP::UserAgent->new->request(new HTTP::Request GET => $URL); print header, $res->is_success ? $res->content : $res->status_line;
Как скачать себе из сети файл jpeg/gif/bmp
 use LWP::UserAgent;
 use CGI qw(header -no_debug);
 $URL =
 'http://a100.g.akamaitech.net/7/100/70/0001/www.fool.com/art/new/butts/go99.
 gif';
 my $res = LWP::UserAgent->new->request(new HTTP::Request GET => $URL);
 binmode(STDOUT);
 print $res->is_success ? (header('image/gif'), $res->content)
                        : (header('text/html'), $res->status_line);
Как получить доступ к защищенному паролем файлу?
 BEGIN {
   package RequestAgent;
   use LWP::UserAgent;
   @ISA = qw(LWP::UserAgent);
   sub new { LWP::UserAgent::new(@_); }
   sub get_basic_credentials { return 'user', 'password' }
 }
 use CGI qw(header -no_debug);
 my $res = RequestAgent->new->request(new HTTP::Request GET => $URL);
 print header, $res->is_success ? $res->content : $res->status_line;
Как установить REFERER и другие параметры в HTTP заголовке?
 use LWP::UserAgent;
 use HTTP::Headers;
 use CGI qw(header -no_debug);
 my $URL = 'http://localhost/cgi-bin/hello.cgi';
 my $res = LWP::UserAgent->new->request(
   new HTTP::Request(
     GET => $URL,
     new HTTP::Headers referer => 'http://www.yahoo.com'),
 );
 print header, $res->is_success ? $res->content : $res->status_line;
Как получить определенную часть файла (первые MAXSIZE байт)?
 use LWP::UserAgent;
 use CGI qw(header -no_debug);
 my $URL = 'http://www.yahoo.com/';
 my $MAXSIZE = 1024;
 print header;
 my $res = LWP::UserAgent->new->request(
   new HTTP::Request(GET => $URL), \&callback, $MAXSIZE);
 sub callback { my($data, $response, $protocol) = @_; print $data; die }
Как получать и устанавливать COOKIES (работа с куками)
 use LWP::UserAgent;
 use CGI qw(header -no_debug);
 use HTTP::Cookies;
 my $URL = 'http://mail.yahoo.com/';
 my $ua = new LWP::UserAgent;
 my $res = $ua->request(new HTTP::Request GET => $URL);
 my $cookie_jar = new HTTP::Cookies;
 $cookie_jar->extract_cookies($res);
 print header;
 if ($res->is_success) {
   my $req = new HTTP::Request GET => $URL;
   $cookie_jar->add_cookie_header($req);
   $res = $ua->request($req);
   print $res->is_success ? $res->as_string : $res->status_line;
 } else {
   print $res->status_line;
 }
Как работать с proxy серверами?
 use LWP::UserAgent;
 use CGI qw(header -no_debug);
 my $URL = 'http://www.yahoo.com/';
 my $ua = new LWP::UserAgent;
 $ua->proxy(['http', 'ftp'], 'http://proxy.sn.no:8001/');
 $ua->proxy('gopher', 'http://proxy.sn.no:8001/');
 my $res = $ua->request(new HTTP::Request GET => $URL);
 print header, $res->is_success ? $res->content : $res->status_line;
Как определить редирект?
use LWP::UserAgent; use CGI qw(header -no_debug); my $URL = 'http://www.yahoo.com/'; my $res = LWP::UserAgent->new->request(new HTTP::Request GET => $URL); print header; print $res->request->url if $res->previous->is_redirect;
Как определить данные для запроса методом POST?
 use URI::URL;
 use HTTP::Request;
 use LWP::UserAgent;
 use CGI qw(header -no_debug);
 my $URL = 'http://yahoo.com/?login=mylogin&password=mypassword';
 my $uri = new URI $URL;
 my $method = 'POST';
 my $request;
 if (uc($method) eq 'POST') {
   my $query = $uri->query;
   (my $url = $uri->as_string) =~ s/\?$query$//;
   $request = new HTTP::Request ($method, $url);
   $request->header('Content-Type' => 'application/x-www-form-urlencoded');
   $request->content($query);
 } else {
   $request = new HTTP::Request ($method, $uri->as_string);
 };
 # add Host field as required in HTTP/1.1
 $request->header(Host => $uri->host_port) if $uri->scheme ne 'file';
 my $res = LWP::UserAgent->new->request($request);
 print header, $res->is_success ? $res->content : $res->status_line;
Как загрузить (upload) файл на удаленный сервер?
 use HTTP::Request::Common;
 use LWP::UserAgent;
 use CGI qw(header -no_debug);
 my $URL = 'http://localhost/cgi-bin/survey.cgi';
 my $req = POST $URL,
   Content_Type => 'form-data',
   Content      => 
     name       => 'Paul Kulchenko',
     email      => '[email protected]',
     surveyfile => ['./survey.dat'], # this file will be uploaded
   ];
 my $res = LWP::UserAgent->new->request($req);
 print header, $res->is_success ? $res->content : $res->status_line;
Как работать с защищенному протоколу (https://) ?
#!/usr/bin/perl -w
$test = "http://www.test.ru/account/secure.html";
use HTTP::Request::Common;
use LWP::UserAgent;
use CGI qw(header -no_debug);
$ua = LWP::UserAgent->new();
my $req = POST $test,
                [
        user => 'vovka',
    password => '123321',
                ];
$content = $ua->request($req)->as_string;
#print "content-type: text/html\n\n";
#print $content;
print $req->as_string;
 
Как получить информацию о файле на удаленном сервере?
 use LWP::UserAgent;
 use CGI qw(header -no_debug);
 my $url = 'http://yahoo.com/';
 my $res = LWP::UserAgent->new->request(HTTP::Request->new(HEAD => $url));
 print header;
 local $\ = "\n";
 if ($res->is_success) {
   $res->previous &&
   $res->previous->is_redirect and print 'redirected: ', $res->request->url;
   $res->last_modified         and print 'modified: ',
 scalar(localtime($res->last_modified));
   $res->content_length        and print 'size: ', $res->content_length;
 } else {
   print $res->status_line;
 }
Как делать редирект, работающий как при GET, так и при POST?
 use LWP::UserAgent;
 use CGI qw(header -no_debug);
 my $URL = 'http://www.yahoo.com/';
 my $MAXSIZE = 1024;
 local $| = 'non buffered';
 print header;
 my $res = LWP::UserAgent->new->request(
   new HTTP::Request(GET => $URL),
   sub { my($data, $response, $protocol) = @_; print $data }, # <= callback
   $MAXSIZE,
 );
« Назад