Question

J'ai écrit un script qui authentifie contre l'API de Google OAuth pour Latitude, en utilisant Net: : OAuth . Correctement authentifie (que je peux récupérer avec succès les données de l'API). Cependant, lorsque je tente de ajouter une entrée historique, je reçois une réponse 401 Unknown authorization header. J'utilise le code suivant:

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

Toutes les variables sont utilisées dans la partie chercher de l'API, donc je sais que ce sont tous ok. Je ne sais pas si j'utilise l'URL correcte pour poster contre, et je l'ai essayé ce qui est dans l'exemple ci-dessus, ainsi que $request->to_url.

Toute suggestion serait grandement appréciée.

Était-ce utile?

La solution

Après quelques allers et retours avec l'équipe de l'API Latitude, il a été déterminé que cette erreur provient du fait que le Content-Type n'est pas réellement être mis à application/json. Modification du code ci-dessus:

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

Et tout fonctionne comme prévu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top