my $query = CGI->new({}); $query->param( 'data', $actual_data ); print $query->self_url; #### { use LWP; my $req = HTTP::Request->new( POST => 'http://127.0.0.1:80/' ); $req->content_type( 'application/json' ); #~ $req->header('X-File-Name' => 'tiny.gif' ); $req->content_length( length $actual_data ); $req->content( $actual_data ); print "\n", $req->as_string, "\n"; } __END__ POST http://127.0.0.1:80/ Content-Length: 59 Content-Type: application/json {"request":{"service":"test"},"data":{"test_input":"%2B2"}} #### use CGI 4.35; my $raw_data = CGI->new->param('POSTDATA'); # or PUTDATA or PATCHDATA