Domanda

Ho scritto uno script che autentica contro l'API OAuth di Google per Latitude, utilizzando netto: : OAuth . Correttamente autentica (come posso recuperare con successo i dati fuori dalla API). Tuttavia, quando cerco di aggiungere una voce storica , ottengo una risposta 401 Unknown authorization header. Sto utilizzando il seguente codice:

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

Tutte le variabili sono utilizzati nella parte prendere delle API, quindi so queste sono tutte ok. Non sono sicuro se sto utilizzando l'URL corretto per pubblicare contro, e ho provato cosa c'è nel campione di cui sopra, così come $request->to_url.

Qualche suggerimento sarebbe molto apprezzato.

È stato utile?

Soluzione

Dopo un po 'avanti e indietro con il team API Latitude, è stato determinato che questo errore deriva dal fatto che la Content-Type non è effettivamente stato impostato a application/json. Modifica del codice di cui sopra 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);

e tutto funziona come previsto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top