Perl Cd Bookshelf [Electronic resources] نسخه متنی

اینجــــا یک کتابخانه دیجیتالی است

با بیش از 100000 منبع الکترونیکی رایگان به زبان فارسی ، عربی و انگلیسی

Perl Cd Bookshelf [Electronic resources] - نسخه متنی

| نمايش فراداده ، افزودن یک نقد و بررسی
افزودن به کتابخانه شخصی
ارسال به دوستان
جستجو در متن کتاب
بیشتر
تنظیمات قلم

فونت

اندازه قلم

+ - پیش فرض

حالت نمایش

روز نیمروز شب
جستجو در لغت نامه
بیشتر
لیست موضوعات
توضیحات
افزودن یادداشت جدید

19.7. Redirecting to a Different Location


19.7.1. Problem


You need to tell the client''s browser
to look elsewhere for a page.

19.7.2. Solution


Instead of a normal header, just issue a location redirect and exit.
Don''t forget the extra newline at the end of the header.

$url = "http://www.perl.com/CPAN/";
print "Location: $url\n\n";
exit;

19.7.3. Discussion


Sometimes your CGI program doesn''t need to generate the document on
its own. It only needs to tell the client at the other end to fetch a
different document instead. In that case, the HTTP header needs to
include this directive as a Location line followed
by the URL you want to send them to. Make sure to use an absolute
URL, not a relative one.

The direct and literal solution given in the Solution is usually
sufficient, but if you already have the CGI module loaded, use the
redirect function. You might use this code for
building and setting a cookie, as shown in Example 19-4.

Example 19-4. oreobounce


  #!/usr/bin/perl -w
# oreobounce - set a cookie and redirect the browser
use CGI qw(:cgi);
use strict;
my $oreo = cookie( -NAME => ''filling'',
-VALUE => "vanilla crème",
-EXPIRES => ''+3M'', # M for month, m for minute
-DOMAIN => ''.perl.com'');
my $whither = "http://somewhere.perl.com/nonesuchl";
print redirect( -URL => $whither,
-COOKIE => $oreo);

That would produce:

Status: 302 Moved Temporarily
Set-Cookie: filling=vanilla%20cr%E4me; domain=.perl.com;
expires=Tue, 21-Jul-1998 11:58:55 GMT
Date: Tue, 21 Apr 1998 11:55:55 GMT
Location: http://somewhere.perl.com/nonesuchl
Content-Type: text/html
<<blank line here>>

Example 19-5 is a complete program that looks at the
client browser name and redirects it to a page in Eric Raymond''s
edition of the Jargon File that talks about the
user''s browser. It''s also a nice example of a different approach to
building a switch statement in Perl (see Recipe 10.17).

Example 19-5. os_snipe


  #!/usr/bin/perl
# os_snipe - redirect to a Jargon File entry about current OS
$dir = ''http://www.wins.uva.nl/%7Emes/jargon'';
for ($ENV{HTTP_USER_AGENT}) {
$page = /Mac/ && ''m/Macintrashl''
|| /Win(dows )?NT/ && ''e/evilandrudel''
|| /Win|MSIE|WebTV/ && ''m/MicroslothWindowsl''
|| /Linux/ && ''l/Linuxl''
|| /HP-UX/ && ''h/HP-SUXl''
|| /SunOS/ && ''s/ScumOSl''
|| ''a/AppendixBl'';
}
print "Location: $dir/$page\n\n";

The os_snipe program uses dynamic redirection
because you don''t always send every user to the same place. If you
did, it would usually make more sense to arrange for a static
redirect line in the server''s configuration file, since that would be
more efficient than running a CGI script for each redirection.

Telling the client''s browser that you don''t plan to produce any
output is not the same as redirecting nowhere:

use CGI qw(:standard);
print header( -STATUS => ''204 No response'' );

That produces this:

Status: 204 No response
Content-Type: text/html
<<blank line here>>

Use this, for instance, when the user submits a form request but you
don''t want their page to change or even update.

It may seem silly to provide a content type and then no content, but
that''s what the module does. If you were hand-coding this, the
content type wouldn''t be required, but the blank line still would be.

#!/bin/sh
cat <<EOCAT
Status: 204 No response
EOCAT

19.7.4. See Also


The documentation for the standard CGI module

/ 875