1

Net :: OAuthを使用して、Latitude用のGoogleのOAuthAPIに対して認証するスクリプトを作成しました。正しく認証されます(APIからデータを正常にフェッチできるため)。ただし、履歴エントリを追加しようとすると、401 Unknown authorization header応答が返されます。私は次のコードを使用しています:

my $location_data = $json->encode(\%data);

$request = Net::OAuth->request("protected resource")->new(
    consumer_key => $c_key,
    consumer_secret => $c_secret,
    token => $token,
    token_secret => $token_secret,
    verifier => $verifier,
    request_url => 'https://www.googleapis.com/latitude/v1/location',
    request_method => 'POST',
    signature_method => $s_method,
    timestamp => time,
    nonce => &nonce(),
    extra_params => {
        key => $s_key
    }
);

$request->sign;

$ua->default_header("Authorization", $request->to_authorization_header);
$ua->default_header("Content-Type", "application/json");

my $res = $ua->post('https://www.googleapis.com/latitude/v1/location?key=' . $s_key,
    Content => $location_data);

すべての変数はAPIのフェッチ部分で使用されるので、それらはすべて問題ないことがわかります。投稿に正しいURLを使用しているかどうかはわかりません。また、上記のサンプルにあるものとを試しました$request->to_url

任意の提案をいただければ幸いです。

4

1 に答える 1

0

Latitude API チームと何度かやり取りした結果、このエラーは がContent-Type実際には に設定されていないことが原因であることが判明しましたapplication/json。上記のコードを次のように変更します。

$ua->default_header("Authorization", $request->to_authorization_header);

my $res = $ua->post('https://www.googleapis.com/latitude/v1/location?key=' . $s_key,
    'Content-Type' => 'application/json',
    Content => $location_data);

そして、すべてが期待どおりに機能します。

于 2010-12-16T21:40:02.227 に答える