in reply to Perl CGI redirect

The variables you give after the ? are usually send as %ENV variables. Why not try to print them all and see if your webserver is like that?

#!/usr/local/bin/perl print "Content-type: text/html\n\n"; print "<pre>\n"; foreach $key (sort keys(%ENV)) { print "$key = $ENV{$key}<br/>"; } print "</pre>\n";

Now, you seem to want to use CGI, in that case, you get them in param, and you can iterate over them, as described in this previous post:
Best way to parse CGI params

You can then use:

my $q = new CGI; if ($q->param("URL")) { ... }

There is also something called Tainted mode, which you should use once your testcode is working, because what If the string after the ? is 2Mb big? or an invalid url etc.

Replies are listed 'Best First'.
Re^2: Perl CGI redirect
by Anonymous Monk on May 26, 2015 at 15:12 UTC
    The variables you give after the ? are usually send as %ENV variables. Why not try to print them all and see if your webserver is like that?

    Trying to parse the query parameters out of %ENV vars yourself is an "ancient" method of doing things, which should no longer be recommended. The OP is already using CGI, which is a much better way of getting the parameters.

    There is also something called Tainted mode, which you should use once your testcode is working, because what If the string after the ? is 2Mb big? or an invalid url etc.

    Using taint mode is generally a good idea but it won't directly help with the two examples you mention. See perlsec.

Re^2: Perl CGI redirect
by jbt424 (Initiate) on May 26, 2015 at 16:32 UTC
    FreeBeer, I will owe you a 12 pack. I will seriously ship it. I am not sure I understand completely, I was able to print out all the variables in your suggested code, but what is the intent? REQUEST_METHOD = GET And..if I take your code, what am I supposed to substitute? Remember that the URL needs to by dynamic so that I can enter any web address in the browser web address.
    my $q = new CGI; if ($q->param("URL")) {....}
    How do I call my .pl script in the browser to call on the URL I am requesting? Is it like this?
    http://webserver/cgi-bin/myscript.pl?URL=http://www.google.com

      Sorry for the delay, I was afk. Ah, yes. Let me present you with working code. Go to chapter 3-6 of

      http://www.cgi101.com/learn/ch3/text.html

      You would call it like http://www.cgi101.com/book/ch3/get.cgi?firstname=hello&lastname=world
      and you can read it like my $var1 = param("firstname"); $var2 = param("lastname")
      Source for both the webpage and the perl CGI and a working example are on that tutorial page.
      For more information just peruse: CGI Programming

        You know what, here is a real example

        #!/usr/bin/perl use CGI qw(:all); #use CGI::Carp qw(warningsToBrowser fatalsToBrowser); use strict; print header; print start_html({-head => meta({ -http_equiv => 'refresh', CONTENT=> '1;url=' . param('URL') }), -title => "This page has moved!" }); print end_html;

        To test it, uncomment the carp command and you call it from the commandline like so:
        perl example.cgi URL=http://127.0.0.1:8080
        If all goes well, you get output similar to:

        Content-Type: text/html; charset=ISO-8859-1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-U +S"> <head> <title>This page has moved!</title> <meta http-equiv="refresh" content="1;url=http://127.0.0.1:8080" /> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1 +" /> </head> <body> </body>

        And now you can test in in the browser and such... keep in mind you still need to validate the url, and check if there is no URL given etc...