You need to set a Content-Type header, and use the special CGI.pm parameter name POSTDATA to access the body of the POST request. This works for me:
Server:
#!/usr/bin/perl -T use warnings; use strict; use CGI; use CGI::Carp qw(fatalsToBrowser); use Data::Dumper qw(Dumper); use JSON::MaybeXS qw/decode_json/; my $q = CGI->new(); print $q->header; my $data = $q->param('POSTDATA'); $data = decode_json($data) if $data; print Dumper($data);
Client:
#!/usr/bin/perl use warnings; use strict; use LWP; use HTTP::Request::Common; use JSON::MaybeXS qw/encode_json/; my @AoH = ( { husband => "barney", wife => "betty", son => "bamm bamm" }, { husband => "george", wife => "jane", son => "elroy" }, { husband => "homer", wife => "marge", son => "bart" } ); my $data = { data => \@AoH }; my $url = 'http://myurl.com/cgi-bin/memo.pl'; my $ua = LWP::UserAgent->new; my $request = POST($url, Content_Type=>'application/json', Content => encode_json($data) ); my $response = $ua->request($request); print $response->content, "\n";
Output on client:
$VAR1 = { 'data' => [ { 'son' => 'bamm bamm', 'husband' => 'barney', 'wife' => 'betty' }, { 'son' => 'elroy', 'wife' => 'jane', 'husband' => 'george' }, { 'husband' => 'homer', 'wife' => 'marge', 'son' => 'bart' } ] };
In reply to Re^4: POST array of hashes CGI
by haukex
in thread POST array of hashes CGI
by IB2017
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |