2017-07-12 1 views
0

Je cherche à faire une requête GET simple (à partir de l'API Aplos) dans R en utilisant le paquetage httr. Je suis en mesure d'obtenir un jeton temporaire en m'authentifiant avec une clé API, mais ensuite je reçois un jeton 401 "introuvable" une fois que j'essaie d'utiliser le jeton pour faire une requête GET réelle. J'apprécierais toute aide! Merci d'avance.Authentification d'API dans R - impossible de transmettre le jeton d'authentification en tant qu'en-tête

AplosURL <- "https://www.aplos.com/hermes/api/v1/auth/" 
AplosAPIkey <- "XYZ" 
AplosAuth <- GET(paste0(AplosURL,AplosAPIkey)) 
AplosAuthContent <- content(AplosAuth, "parsed") 
AplosAuthToken <- AplosAuthContent$data$token 
#This is where the error occurs 
GET("https://www.aplos.com/hermes/api/v1/accounts", 
    add_headers(Authorization = paste("Bearer:", AplosAuthToken))) 

C'est un Python extrait fourni par la documentation de l'API:

def api_accounts_get(api_base_url, api_id, api_access_token): 
    # This should print a contact from Aplos. 
    # Lets show what we're doing. 
    headers = {'Authorization': 'Bearer: {}'.format(api_access_token)} 
    print 'geting URL: {}accounts'.format(api_base_url) 
    print 'With headers: {}'.format(headers) 

    # Actual request goes here. 
    r = requests.get('{}accounts'.format(api_base_url), headers=headers) 
    api_error_handling(r.status_code) 
    response = r.json() 
    print 'JSON response: {}'.format(response) 
    return (response) 

Répondre

0

Dans l'exemple de python, le retour du bloc de code auth est le api_bearer_token qui est base64 décodé et rsa déchiffré (en utilisant votre clé) avant de pouvoir l'utiliser. Ce jeton décodé est ensuite utilisé dans l'appel API pour obtenir les comptes.

Le deuxième problème que je vois est que votre en-tête d'autorisation ne correspond pas à l'en-tête de l'exemple. Plus précisément, il vous manque l'espace après « Bearer: »

headers = {'Authorization': 'Bearer: {}'.format(api_access_token)} 

vs

add_headers(Authorization = paste("Bearer:", AplosAuthToken))) 

probablement après avoir adressé ces deux, vous devriez être en mesure de procéder.