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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top