Automating Form Submission
Problem
You want to submit form values to a CGI script from your program.
Solution
If you’re submitting form values using the GET method, create a
URL and encode the form using the
query_form
method:
use LWP::Simple;
use URI::URL;
my $url = url('http://www.perl.com/cgi-bin/cpan_mod');
$url->query_form(module => 'DB_File', readme => 1);
$content = get($url);If you’re using the POST method, create your own user agent and encode the content appropriately:
use HTTP::Request::Common qw(POST);
use LWP::UserAgent;
$ua = LWP::UserAgent->new();
my $req = POST 'http://www.perl.com/cgi-bin/cpan_mod',
[ module => 'DB_File', readme => 1 ];
$content = $ua->request($req)->as_string;Discussion
For simple operations, the procedural interface of the LWP::Simple module is sufficient. For fancier ones, the LWP::UserAgent module provides a virtual browser object, which you manipulate using method calls.
The format of a query string is:
field1=value1&field2=value2&field3=value3
In GET requests, this is encoded in the URL being requested:
script.cgi?field1=value1&field2=value2&field3=value3
Fields must still be properly escaped, so setting the
arg form parameter to "this
isn't
<EASY>&<FUN>" would yield:
http://www.site.com/path/to/ script.cgi?arg=%22this+isn%27t+%3CEASY%3E+%26+%3CFUN%3E%22
The query_form method called on a URL object
correctly escapes the form values for you, or you could use the
URI::Escape::uri_escape or
CGI::escape_html functions on your own. In POST requests, the ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access