Sample code for 30+ languages & platforms
Perl

HTTP Redirect Handling

Examine HTTP redirects.

Chilkat Perl Downloads

Perl
use chilkat();

$success = 0;

# This example assumes the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.

$http = chilkat::CkHttp->new();

# Please note: The URL used in this example was a valid redirect many years ago,
# but the site does not exist any longer..
$url = "http://www.planyourweddingonline.co.za/";

# The FollowRedirects property controls whether redirects
# are automatically followed.  The default behavior is to
# automatically follow redirects.

# Explicitly set FollowRedirects so that redirects are automatically taken:
$http->put_FollowRedirects(1);

# Send the HTTP GET and return the content in a string.
$html = $http->quickGetStr($url);
if ($http->get_LastMethodSuccess() != 1) {
    print $http->lastErrorText() . "\r\n";
}

# On success, LastErrorText will provide information about
# what happened during the call.
print "--------------- LastErrorText ------------------" . "\r\n";
print $http->lastErrorText() . "\r\n";
print "------------------------------------------------" . "\r\n";

# In this case, we see something like this:
# ChilkatLog:
#   QuickGetHtml:
#     DllDate: Jul 27 2007
#     url: http://www.planyourweddingonline.co.za/
#     httpServer: www.planyourweddingonline.co.za
#     port: 80
#     StatusCode: 302
#     StatusText: Found
#     Reading chunked response
#     redirectUrl: main/main/home/index.php
#     url: http://www.planyourweddingonline.co.za/main/main/home/index.php
#     StatusCode: 302
#     StatusText: Found
#     Reading chunked response
#     redirectUrl: /main/main/home/index.php?SMC=1
#     url: http://www.planyourweddingonline.co.za/main/main/home/index.php?SMC=1
#     StatusCode: 200
#     StatusText: OK
#     CompressedSize: 7434
#     UncompressedSize: 40999

# Was the GET redirected?
if ($http->get_WasRedirected() == 1) {
    print "Chilkat HTTP followed the redirect." . "\r\n";

    # Display the final redirect URL:
    print "Final URL:" . "\r\n";
    print $http->finalRedirectUrl() . "\r\n";

    # Note the HTML returned is from the final redirect URL.

}
else {
    print "Not redirected." . "\r\n";
}

$status = $http->get_LastStatus();
if ($status == 200) {
    print "status = 200, OK!" . "\r\n";
}
else {
    print "HTTP Response status = " . $status . "\r\n";

    # Display the complete response header.
    print $http->lastResponseHeader() . "\r\n";
}

# Now try it without following redirects:
print "-------- Now trying without following redirects...." . "\r\n";
$http->put_FollowRedirects(0);

# Send the HTTP GET and return the content in a string.
$html = $http->quickGetStr($url);
if ($http->get_LastMethodSuccess() != 1) {
    # the HTML string can NULL if a 302 redirect response is received.
    print "HTML string returned NULL..." . "\r\n";
}

# On success, LastErrorText will provide information about
# what happened during the call.
print "--------------- LastErrorText ------------------" . "\r\n";
print $http->lastErrorText() . "\r\n";
print "------------------------------------------------" . "\r\n";

# In this case, we see something like this:
# ChilkatLog:
#   QuickGetHtml:
#     DllDate: Jul 27 2007
#     url: http://www.planyourweddingonline.co.za/
#     StatusCode: 302
#     StatusText: Found
#     Reading chunked response
#     redirectUrl: main/main/home/index.php

# Was this a redirect?  Even if FollowRedirects is false,
# WasRedirected will be true (non-zero) if the response
# indicated a redirect.
if ($http->get_WasRedirected() == 1) {
    print "This was a redirect response" . "\r\n";

    # When redirects are not followed, FinalRedirectUrl
    # contains the redirect URL that would've been taken...
    # Display the redirect URL, which was not taken...
    print "Redirect URL:" . "\r\n";
    print $http->finalRedirectUrl() . "\r\n";

}
else {
    print "Not redirected." . "\r\n";
}

$status = $http->get_LastStatus();
if ($status == 200) {
    print "status = 200, OK!" . "\r\n";
}
else {
    print "HTTP Response status = " . $status . "\r\n";

    # Display the complete response header.
    print $http->lastResponseHeader() . "\r\n";
}