Google LatitudeとOAuthはリクエストに署名しました
-
10-10-2019 - |
質問
GoogleのOAuth APIに対して緯度を認証するスクリプトを書きました。 Net :: Oauth. 。正しく認証されます(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
.
どんな提案でも大歓迎です。
解決
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);
そして、すべてが期待どおりに機能します。
所属していません StackOverflow