2017-07-12 165 views
0

我正在寻找使用httr包在R中执行简单的GET请求(来自Aplos API)。我可以通过使用API​​密钥进行身份验证来获取临时令牌,但是一旦尝试使用该令牌发出实际的GET请求,就会收到401“令牌无法找到”。将不胜感激任何帮助!先谢谢你。R中的API身份验证 - 无法将身份验证令牌作为标头

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

这是一个Python代码段由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) 

回答

0

在Python示例中,auth代码块的返回是作为BASE64的api_bearer_token解码和RSA解密(使用键)才可以使用。

... 
api_token_encrypted = data['data']['token'] 
api_bearer_token = rsa.decrypt(base64.decodestring(api_token_encrypted), api_user_key) 

return(api_bearer_token) 

解码后的令牌随后用于api调用以获取帐户。

我看到的第二个问题是您的授权标头与示例的标头不匹配。具体来说,你错过后面的空格“承载”

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

VS

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

可能的解决这两个之后,你应该能够继续进行。