Rodster001 has asked for the wisdom of the Perl Monks concerning the following question:

Hi Monks,

I've been using Net::OAuth for sometime, but only with GET requests. I need to do a POST but I am having trouble figuring out how/where to add the POST body to the request (and not end up as query string parameters to the URL).
my $ua = LWP::UserAgent->new; my $content = { example => "content", name => "me" } my $request = Net::OAuth->request("protected resource")->new( consumer_key => <key>, consumer_secret => <secret>, request_url => 'https://someplace.whatever', request_method => 'POST', signature_method => 'HMAC-SHA1', timestamp => time(), nonce => 'kllo9940pd9333jh', token => <token>, token_secret => <secret>, extra_params => { foo => 'bar' } ); $request->sign; my $res = $ua->post( $request->to_url, Content_Type => 'form-data', Content => $content );
So, this obviously doesn't work because the $content is added after it is signed. I am just not sure where the form content needs to be added when I create the Net::OAuth request (parameter name or what). I've tried several ways but nothing is really working for me.

Any help is greatly appreciated.

Replies are listed 'Best First'.
Re: Need a Net::OAuth POST example
by Mr. Muskrat (Canon) on Feb 19, 2016 at 00:03 UTC

    I have never used Net::OAuth but after a quick read through the docs, I think the correct answer is to put $content in extra_params and use to_post_body in the post method call.

    my $ua = LWP::UserAgent->new; my $content = { example => "content", name => "me" } my $request = Net::OAuth->request("protected resource")->new( consumer_key => <key>, consumer_secret => <secret>, request_url => 'https://someplace.whatever', request_method => 'POST', signature_method => 'HMAC-SHA1', timestamp => time(), nonce => 'kllo9940pd9333jh', token => <token>, token_secret => <secret>, extra_params => { foo => 'bar', %{$content} } ); $request->sign; my $res = $ua->post( $request->to_url, Content_Type => 'form-data', Content => $request->to_post_body, );

    I found a post from 2011 which seems to indicate that I am on the right track: https://txlab.wordpress.com/2011/09/03/using-tumblr-api-v2-from-perl/

    Update: Another option would be to use Net::OAuth::Simple which seems basically do the same thing behind the scenes.