Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I use Perl to send and HTTP request with a cookie?

Tags:

perl

I am new to Perl and I want to write a Perl program that:

  • creates an HTTP request
  • sends it to any URL (e.g. http://www.google.com )
  • includes a cookie in the request
  • logs the http response codes in a file

I have tried this:

    #!/usr/bin/perl
require HTTP::Request;
require LWP::UserAgent;

$request = HTTP::Request->new(GET => 'http://www.google.com/');
$ua = LWP::UserAgent->new;
$ua->cookie_jar({file => "testcookies.txt",autosave =>1});

$response = $ua->request($request);
if($response->is_success){
print "sucess\n";
print $response->code;
}
else {
print "fail\n";
die $response->code;
}

pls tell how to set cookie in 'request' ie

how to set a cookie when we send HTTP::Request

i was expecting something like:

$request = HTTP::Request->new(GET => 'http://www.google.com/');
$ua = LWP::UserAgent->new;
$ua->new CGI::Cookie(-name=>"myCookie",-value=>"fghij");

is this possible??

like image 333
dexter Avatar asked Mar 19 '10 06:03

dexter


People also ask

How do I add cookies to my HTTP request?

To add cookies to a request for authentication, use the header object that is passed to the get/sendRequest functions. Only the cookie name and value should be set this way. The other pieces of the cookie (domain, path, and so on) are set automatically based on the URL the request is made against.

How do I send a post request in Perl?

$ua->agent); my $req = new HTTP::Request POST => 'http://example.com'; $req->content('port=8', 'target=64'); #problem my $res = $ua->request($req); print Dumper($res->content); How can I send multiple pieces of content using $req->content?


1 Answers

As mentioned cookies are in HTTP::Cookies:

  • You need to create a cookie jar

  • You set the value of the cookies to put in the jar

  • You then associate that jar with your user agent

For example:

my $ua = LWP::UserAgent->new;
my $cookies = HTTP::Cookies->new();
$cookies->set_cookie(0,'cookiename', 'value','/','google.com',80,0,0,86400,0);
$ua->cookie_jar($cookies);
# Now make your request

set_cookie has a rather large number of arguments:

set_cookie( $version, $key, $val, $path, $domain, $port, $path_spec, $secure, $maxage, $discard, \%rest )

This is because the cookie jar is designed from the point of view of a browser (a UserAgent), rather than a single request. This means not all the arguments are so important in this case.

The ones you need to get right are $key, $val, $path, $domain, $port.

Regarding the:

500 Can't connect to www.google.com:80 (Bad hostname 'www.google.com')

It means that LWP can't lookup the address for Google. Are you behind a web proxy? If so you will need to set your proxy in the UA too using something like:

$ua->proxy(['http', 'https'], 'http://proxyhost.my.domain.com:8080/');

like image 143
Gavin Brock Avatar answered Oct 30 '22 13:10

Gavin Brock