I'm having the same problem as Jesse using the Net::OAuth Here's what I get back from twitter:
$VAR1 = bless( { '_protocol' => 'HTTP/1.1', '_content' => 'Failed to validate oauth signature or token', '_rc' => '401', '_headers' => bless( { 'connection' => 'close', 'set-cookie' => '_twitter_sess=BAh7BiIKZ0xhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNo %250ASGFzaHsABjoKQHVzZWR7AA%253D %253D--1164b91ac812d853b877e93ddb612b7471bebc74; domain=.twitter.com; path=/', 'cache-control' => 'no-cache, max-age=300', 'status' => '401 Unauthorized', 'date' => 'Sat, 16 May 2009 01:57:55 GMT', 'vary' => 'Accept-Encoding', 'client-ssl-cert-issuer' => '/ C=US/O=Equifax Secure Inc./CN=Equifax Secure Global eBusiness CA-1', 'client-ssl-cipher' => 'DHE- RSA-AES256-SHA', 'client-peer' => '128.121.146.100:443', 'client-warning' => 'Missing Authenticate header', 'client-date' => 'Sat, 16 May 2009 01:57:55 GMT', 'client-ssl-warning' => 'Peer certificate not verified', 'content-type' => 'text/html; charset=utf-8', 'server' => 'hi', 'client-response-num' => 1, 'content-length' => '43', 'client-ssl-cert-subject' => '/ C=US/O=twitter.com/OU=GT09721236/OU=See www.rapidssl.com/resources/cps (c)08/OU=Domain Control Validated - RapidSSL(R)/CN=twitter.com', 'expires' => 'Sat, 16 May 2009 02:02:55 GMT' }, 'HTTP::Headers' ), '_msg' => 'Unauthorized', '_request' => bless( { '_content' => '', '_uri' => bless( do{\(my $o = 'https://twitter.com/statuses/update.json? oauth_consumer_key=K9ICZr8UwHCVza91AH9Sg&oauth_nonce=2AIYDaoQyknJ5Cpq&oauth_signature=W %2BQu6CG7ENoVNghVyNU4DX%2B2LJM%3D&oauth_signature_method=HMAC- SHA1&oauth_timestamp=1242439075&oauth_token=15385100- snbvmpiROaexwcJx00gkCegiBwX481bvGsVOmRo8e&oauth_version=1.0&status=Test +message')}, 'URI::https' ), '_headers' => bless( { 'user- agent' => 'libwww-perl/5.808', 'content-type' => 'application/x-www-form-urlencoded', 'content-length' => 0 }, 'HTTP::Headers' ), '_method' => 'POST' }, 'HTTP::Request' ) }, 'HTTP::Response' ); On Apr 30, 6:39 pm, Mario Menti <mme...@gmail.com> wrote: > On Thu, Apr 30, 2009 at 11:22 PM, Jesse Stay <jesses...@gmail.com> wrote: > > I just wanted to bring back attention to this. Has anyone on the list > > gotten Twitter's OAuth to work with Perl? Care to share some code examples? > > I'm using Perl's Net::OAuth heavily, but only for updating twitter status > with existing access tokens (as my backend processing is Perl, while the > frontend is RoR, so authorisation/key exchange is handled through rails > OAuth). > > I did find one bug which I've reported back to the Net::OAuth CPAN > maintainer, who said he'll implement in a future release: > > The issue relates > tohttp://code.google.com/p/twitter-api/issues/detail?id=433#c32(there's lots > of useful into in this thread) > > The problem occurs when you pass an extra_param containing certain Unicode > characters. What happens is that the parameter is passed to the signature > creation, and the signature ends up wrong, leading to 401 errors when trying > to make a request. > > The fix for this is actually detailed in the above thread, a problem with > the regexp doing the escaping. In Perl's case, the below change > to Net::OAuth's Message.pm fixes this: > > sub encode { > my $str = shift; > $str = "" unless defined $str; > # return URI::Escape::uri_escape_utf8($str,'^\w.~-'); > # MM, fix based on twitter OAuth bug report > return URI::Escape::uri_escape($str,'^0-9a-zA-Z\d._~-'); > } > > I'm not sure if this is relevant to you given your previous messages, but > thought I'd share just in case. With this fix implemented, it seems to work > very well, more than 10,000 of my users have migrated to OAuth and I'm doing > hundreds of thousands OAuth-based status update requests, without obvious > problems. > > Mario.