Google Локатор и OAuth Подписанные запросы
Я написал скрипт, который аутентифицируется по API OAuth Google для Локатора, используя 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
,
Любые предложения будут ценны.
1 ответ
После некоторой перемотки с командой 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);
И все работает как положено.