#!/usr/bin/env perl use Modern::Perl '2015'; use Math::Random::MT 'rand'; use Net::OAuth; use URL::Encode 'url_encode'; use HTTP::Request; use LWP::UserAgent; use JSON::XS; use Data::Dumper 'Dumper'; my %params = ( id => 'watchlist-' . time, symbols => 'AAPL,MSFT', ); my $content = join( '&', map { url_encode($_) . '=' . url_encode( $params{$_} ) } keys %params ); my $oauth = Net::OAuth->request('protected resource')->new( consumer_key => '...', consumer_secret => '...', token => '...', token_secret => '...', protocol_version => Net::OAuth::PROTOCOL_VERSION_1_0A, signature_method => 'HMAC-SHA1', timestamp => time, nonce => int( rand( 2**32 ) ), request_url => 'https://api.tradeking.com/v1/watchlists.json', request_method => 'POST', extra_params => \%params, ); $oauth->sign; my $request = HTTP::Request->new( $oauth->request_method, $oauth->request_url, [ 'Authorization' => $oauth->to_authorization_header, 'Content-Type' => 'application/x-www-form-urlencoded', ], $content, ); say $request->as_string; my $response = LWP::UserAgent->new->request($request); if ( not $response->is_success ) { say $response->message; say $response->content; } else { say Dumper( JSON::XS->new->decode( $response->content ) ); }