2010-12-14 6 views
1

Я написал сценарий, который проверяет подлинность API OAuth Google для Локатора, используя Net::OAuth. Он правильно аутентифицирует (поскольку я могу успешно извлекать данные из API). Однако, когда я пытаюсь add an historical entry, я получаю ответ 401 Unknown authorization header. Я использую следующий код:Google Latitude и OAuth Подписанные запросы

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.

Любые предложения были бы весьма полезными.

ответ

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); 

И все работает так, как ожидалось.