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.

Reply via email to