Google Latitud y solicitudes de OAuth Firmado
-
10-10-2019 - |
Pregunta
He escrito un guión que se autentica en OAuth API de Google para Latitud, utilizando neto: : OAuth . Autentica correctamente (como que puedo pedir con éxito datos de la API). Sin embargo, cuando intento añadir una entrada histórica, consigo una respuesta 401 Unknown authorization header
. Estoy usando el siguiente código:
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);
Todas las variables se utilizan en la parte de ir a buscar de la API, así que sé que todas esas son bien. No estoy seguro de si estoy utilizando la URL correcta para publicar en contra, y he tratado de lo que hay en la muestra anterior, así como $request->to_url
.
Cualquier sugerencia sería muy apreciada.
Solución
Después de algunas idas y vueltas con el equipo API de Latitude, se determinó que este error viene del hecho de que el Content-Type
no está siendo realmente listo para application/json
. Cambiar el código de arriba a:
$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);
Y todo funciona como se esperaba.