2013-02-26 89 views
0

我試圖從https://launchpad.net請求一個令牌,根據文檔所有它想要的是一個POST to/+請求令牌,其編碼值爲oauth_consumer_key,oauth_signature,和oauth_signature_method。提供通過捲曲工程的項目按預期:net :: oauth返回401未經授權,即使捲曲工作

curl --data "oauth_consumer_key=test-app&oauth_signature=%26&oauth_signature_method=PLAINTEXT" https://launchpad.net/+request-token 

然而,當我試圖做到這一點通過我的Perl腳本它給我一個401未經授權錯誤。

#!/usr/bin/env perl 

use strict; 
use YAML qw(DumpFile); 
use Log::Log4perl qw(:easy); 
use LWP::UserAgent; 
use Net::OAuth; 
$Net::OAuth::PROTOCOL_VERSION = Net::OAuth::PROTOCOL_VERSION_1_0A; 
use HTTP::Request::Common; 
use Data::Dumper; 
use Browser::Open qw(open_browser); 

my $ua = LWP::UserAgent->new; 

my ($home)   = glob '~'; 
my $cfg    = "$home/.lp-auth.yml"; 
my $access_token_url = q[https://launchpad.net/+access-token]; 
my $authorize_path = q[https://launchpad.net/+authorize-token]; 

sub consumer_key { 'lp-ua-browser' } 
sub request_url {"https://launchpad.net/+request-token"} 

my $request = Net::OAuth->request('consumer')->new(
    consumer_key  => consumer_key(), 
    consumer_secret => '', 
    request_url  => request_url(), 
    request_method => 'POST', 
    signature_method => 'PLAINTEXT', 
    timestamp  => time, 
    nonce   => nonce(), 
); 

$request->sign; 
print $request->to_url; 

my $res = $ua->request(POST $request->to_url, Content $request->to_post_body); 
my $token; 
my $token_secret; 
print Dumper($res); 
if ($res->is_success) { 
    my $response = 
     Net::OAuth->response('request token')->from_post_body($res->content); 
    $token  = $response->token; 
    $token_secret = $response->token_secret; 
    print "request token ",  $token,  "\n"; 
    print "request token secret", $token_secret, "\n"; 
    open_browser($authorize_path . "?oauth_token=" . $token); 
} 
else { 
    die "something broke ($!)"; 
} 

我都嘗試用$request->sign,沒有它,因爲我不認爲在請求令牌階段所需。無論如何,任何幫助,這將不勝感激。

更新,切換到LWP :: UserAgent的,不得不在這兩個POST傳遞和內容:

my $res = $ua->request(POST $request->to_url, Content $request->to_post_body); 

感謝

回答

相關問題