How can I make a JSON POST request with LWP?
You'll need to construct the HTTP request manually and pass that to LWP. Something like the following should do it:
my $uri = 'https://orbit.theplanet.com/Login.aspx?url=/Default.aspx';my $json = '{"username":"foo","password":"bar"}';my $req = HTTP::Request->new( 'POST', $uri );$req->header( 'Content-Type' => 'application/json' );$req->content( $json );
Then you can execute the request with LWP:
my $lwp = LWP::UserAgent->new;$lwp->request( $req );
Just create a POST request with that as the body, and give it to LWP.
my $req = HTTP::Request->new(POST => $url);$req->content_type('application/json');$req->content($json);my $ua = LWP::UserAgent->new; # You might want some options heremy $res = $ua->request($req);# $res is an HTTP::Response, see the usual LWP docs.
The page is just using an "anonymized" (without name) input, which happens to be in JSON format.
You should be able to use $ua->post($url, ..., Content => $content), which in turn use the POST() function from HTTP::Request::Common.
use LWP::UserAgent;my $url = 'https://orbit.theplanet.com/Login.aspx?url=/Default.aspx';my $json = '{"username": "foo", "password": "bar"}';my $ua = new LWP::UserAgent();$response = $ua->post($url, Content => $json);if ( $response->is_success() ) { print("SUCCESSFUL LOGIN!\n");}else { print("ERROR: " . $response->status_line());}
Alternatively, you can also use an hash for the JSON input:
use JSON::XS qw(encode_json);...my %json;$json{username} = "foo";$json{password} = "bar";...$response = $ua->post($url, Content => encode_json(\%json));