Google Latitude und OAuth Signed-Anfragen
-
10-10-2019 - |
Frage
Ich habe ein Skript geschrieben, dass authentisiert gegen Googles OAuth API für Latitude, Net mit: : OAuth . Er authentifiziert richtig (wie ich kann erfolgreich Datenabruf aus dem API). Allerdings, wenn ich versuche, einen historischen Eintrag hinzufügen , ich eine 401 Unknown authorization header
Antwort. Ich verwende den folgenden Code ein:
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);
Alle Variablen sind in dem Abruf Teil der API verwendet, damit ich weiß, alle in Ordnung ist. Ich bin mir nicht sicher, ob ich die richtige URL bin mit gegen schreiben, und ich habe versucht, was in der Probe ist oben, sowie $request->to_url
.
würde Irgendwelche Vorschläge sehr geschätzt.
Lösung
Nach einiger Hin und Her mit dem Latitude API-Team wurde festgestellt, dass dieser Fehler kommt von der Tatsache, dass der Content-Type
tatsächlich nicht auf application/json
zu sein. Ändern Sie den obigen Code an:
$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);
Und alles funktioniert wie erwartet.