Google Локатор и OAuth Подписанные запросы - PullRequest
1 голос
/ 14 декабря 2010

Я написал скрипт, который аутентифицируется с помощью 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.

Любые предложения будут с благодарностью.*

1 Ответ

0 голосов
/ 17 декабря 2010

После некоторого перерыва в команде 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);

И все работает как положено.

...