Perl Tutorials - Herong's Tutorial Examples - v6.03, by Herong Yang
LWP-UserAgent-GET-Redirect.pl - Following HTTP Redirects
This section provides a tutorial example on how to send a GET request to a Web server, follow up with redirects, and dump request and response messages of all redirects.
Here is the improved LWP::UserAgent test program:
#- LWP-UserAgent-GET-Redirect.pl
#- Copyright (c) HerongYang.com. All Rights Reserved.
use LWP::UserAgent;
my ($uri) = @ARGV;
$uri = 'http://herongyang.com/' unless $uri;
my $browser = new LWP::UserAgent();
$browser->max_redirect(5);
$browser->agent("Mozilla/5.0 (Windows NT 6.1)");
my $response = $browser->get($uri);
my $request = $response->request();
my @redirects = $response->redirects();
foreach my $res (@redirects) {
my $req = $res->request();
print($req->as_string());
print($res->as_string());
}
print($request->as_string());
print($response->as_string());
exit;
3 changes are made on the program:
Now try this new testing program on facebook.com, I got the following:
herong> LWP-UserAgent-GET-Redirect.pl http://www.facebook.com
GET http://www.facebook.com
User-Agent: Mozilla/5.0 (Windows NT 6.1)
HTTP/1.1 301 Moved Permanently
Cache-Control: private, no-cache, no-store, must-revalidate
Connection: close
Pragma: no-cache
Location: https://www.facebook.com/
Content-Length: 0
Content-Type: text/html; charset=utf-8
...
GET https://www.facebook.com/
User-Agent: Mozilla/5.0 (Windows NT 6.1)
HTTP/1.1 200 OK
Cache-Control: private, no-cache, no-store, must-revalidate
Connection: close
Pragma: no-cache
Content-Type: text/html; charset=utf-8
Client-Response-Num: 1
Client-SSL-Cert-Issuer: /C=US/O=VeriSign, Inc./OU=VeriSign Trust N...
Client-SSL-Cert-Subject: /C=US/ST=California/L=Palo Alto/O=Faceboo...
Client-SSL-Cipher: ECDHE-RSA-AES128-GCM-SHA256
Client-SSL-Socket-Class: IO::Socket::SSL
Client-Transfer-Encoding: chunked
Link: <https://www.facebook.com/>; media="handheld"; rel="alternate"
Link: <https://www.facebook.com/>; hreflang="en"; rel="alternate"
P3P: CP="Facebook does not have a P3P policy. Learn why here: http...
Refresh: 0; URL=/?_fb_noscript=1
Set-Cookie: reg_fb_ref=https%3A%2F%2Fwww.facebook.com%2F; path=/; ...
Title: Welcome to Facebook - Log In, Sign Up or Learn More
X-Content-Type-Options: nosniff
X-FB-Debug: HshLC4adnJI8cXDgh8tGUSyMrbso7p3Wfw1EDU61Swo=
X-Frame-Options: DENY
X-Meta-Charset: utf-8
X-Meta-Description: Facebook is a social utility that connects peo...
X-Meta-Referrer: default
X-Meta-Robots: noodp, noydir
X-XSS-Protection: 0
<!DOCTYPE html>
<html lang="en" id="facebook" class="no_js">
<head><meta charset="utf-8" /><script>function envFlush(a){functio...
<link type="text/css" rel="stylesheet" href="https://fbstatic-...
...
<form id="login_form"
action="https://www.facebook.com/login.php?login_attempt=1"
method="post" onsubmit="return window.Event && Event.__inline...
<input type="text" class="inputtext" name="email" id="email" value...
<input type="password" class="inputtext" name="pass" id="pass" tab...
...
As you can see, facebook.com server is happier now.
If we want to continue to play with the facebook web server, we need use LWP::UserAgent post() method to submit the login form. Continue with the next tutorial.
Table of Contents
Data Types: Values and Variables
Expressions, Operations and Simple Statements
Name Spaces and Perl Module Files
Hard References - Addresses of Memory Objects
Objects (or References) and Classes (or Packages)
Typeglob and Importing Identifiers from Other Packages
String Built-in Functions and Performance
File Handles and Data Input/Output
Open Directories and Read File Names
File System Functions and Operations
Socket Communication Over the Internet
XML::Simple Module - XML Parser and Generator
SOAP::Lite - SOAP Server-Client Communication Module
Perl Programs as IIS Server CGI Scripts
CGI (Common Gateway Interface)
XML-RPC - Remote Procedure Call with XML and HTTP
RPC::XML - Perl Implementation of XML-RPC
Integrating Perl with Apache Web Server
CGI.pm Module for Building Web Pages
►LWP::UserAgent and Web Site Testing
LWP-UserAgent-GET.pl - Sending a GET Request
►LWP-UserAgent-GET-Redirect.pl - Following HTTP Redirects
http-equiv="Refresh" Meta Tag not Followed
LWP-UserAgent-POST.pl - Posting Form Data
post() Method not Following Redirect Location
LWP-UserAgent-POST-Redirect.pl - Posting with Redirects
LWP-UserAgent-Request.pl - GET, POST and Cookies
LWP-UserAgent-Request.pl - Login to facebook.com
HTTP::Cookies save() not Saving Temporary Cookies
LWP-UserAgent-Request-Cookies.pl - Sending Request with Cookies
Converting Perl Script to Executable Binary