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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top