Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to POST content with an HTTP Request (Perl)

Tags:

http

perl

lwp

use LWP::UserAgent;
use Data::Dumper;

my $ua = new LWP::UserAgent;
$ua->agent("AgentName/0.1 " . $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? What kind of data does $req->content expect?

It only sends the last one.

Edit:

Found out if i format it like 'port=8&target=64' it works. Is there a better way?

like image 397
Takkun Avatar asked Jun 29 '12 15:06

Takkun


People also ask

How do I send a post request in Perl?

use LWP::UserAgent; use Data::Dumper; my $ua = new LWP::UserAgent; $ua->agent("AgentName/0.1 " . $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);

What is LWP user agent?

While LWP consists of dozens of classes, the two that you have to understand are LWP::UserAgent and HTTP::Response . LWP::UserAgent is a class for “virtual browsers,” which you use for performing requests, and HTTP::Response is a class for the responses (or error messages) that you get back from those requests.

What is LWP :: Simple?

LWP::SimpleReturns the contents of the URL specified by $url. Upon failure, get( ) returns undef. Other than returning undef, there is no way of accessing the HTTP status code or headers returned by the server. head($url)

What is in a post request?

In computing, POST is a request method supported by HTTP used by the World Wide Web. By design, the POST request method requests that a web server accept the data enclosed in the body of the request message, most likely for storing it. It is often used when uploading a file or when submitting a completed web form.


1 Answers

Using together LWP::UserAgent and HTTP::Request as it is also quite common if not even more frequent practice , I was little puzzled that the standard POST and GET / request were almost not discussed at SO aside from json as them are in vast majority used.

POST

    my $ua  = LWP::UserAgent->new();
    my $req = new HTTP::Request( 
       'POST' => "http://url/path", 
       ['Content-Type' => 'application/x-www-form-urlencoded; charset=UTF-8'],
       'par1=par1value&par2=par2value'
    );
    $ua->request($req);

similarly for the GET

    my $ua  = LWP::UserAgent->new();
    my $req = new HTTP::Request( 
       'GET' => "http://url/path", 
       ['Content-Type' => 'application/x-www-form-urlencoded; charset=UTF-8'],
       'par1=par1value&par2=par2value' # or I presume attaching the query string directly to the url
    );
    $ua->request($req);

another format form , where the first two parameters (method and url) are not fused into a one, not like the previous, but separately

my $request = HTTP::Request->new( 'POST', $url, [ parameter1 => 'parameter1Value' ] );
request->header( 'Content-Type' => 'application/json' )

There is a similar question, but just regards LWP and Json, but it could be probably accomplished only by using both LWP and HTTP::Request together as suggested by that question chosen answer, and the POST and GET were missing there but it might not have been obvious

How can I make a JSON POST request with LWP?

Note: I post this specially also, since the concrete/concise usage for POST/GET is not mentioned even in the documentation https://metacpan.org/pod/HTTP::Request

like image 199
FantomX1 Avatar answered Oct 19 '22 17:10

FantomX1