2017-06-13 670 views
0

我通过Python的“requests'模块进行API请求。我正在获取access_token,这是一个不记名令牌。 我已经把令牌到一个变量是这样的:如何存储为的access_token对API的更多请求(Python)的

def get_token(): 
    url = 'https://myapiurl.com/oauth/token' 
    payload = {'username':'myusername', 'password':'mypassword'} 
    headers = {'Content-Type': 'application/json', 'origin': 'https://blabla.com'} 
    r = requests.post(url, data=json.dumps(payload),headers=headers) 
    mytoken = r.json()['token_type'] 
    mytokentype = r.json()['access_token'] 
    token_param = str(mytoken) + ' ' + str(mytokentype) 
    return token_param 

输出是具有这种结构的字符串:

Bearer eyJ0eXAiOiJKV1QiLCJhb.....0sImF6cCI6ImVCOEdI 

我需要这个结构以下GET请求,其中这是的access_token需要。每次我发出新的GET请求时,我都不想获得新的令牌。

我在寻找如何来的问题:

1:存储一个的access_token

2:检查的access_token有效

3:使用此标记使其他GET请求我的API。

我的任何意见非常感谢。

+0

一个解决方案是保存在的access_token一个全局变量(如果你不使用任何数据库),然后直到它过期您所有的GET请求使用它。在到期时,当发出请求时,它会给你相应的错误,在得到这个错误时再次调用'get_token()'函数来获得新的令牌。 –

+0

是的,帮助,谢谢。 存储令牌全局变量'complete_token': 'result_accesstoken =导致[ “的access_token”] result_tokentype =结果[ “token_type”] complete_token = STR(result_tokentype)+ “” + STR(result_accesstoken)' 使用可变作为参数值: '头= { “授权”:complete_token, “X-用户组”: “app_create”, “内容类型”: “应用/ JSON”}' 我现在可以使用此标记进行其他GET请求。 你有一个想法如何检查,如果该请求是有效的(和模块可能需要)? –

+0

发出请求并检查响应,这几乎全是它。使用图形API资源管理器来探索你可以从API获得什么。阅读FB API文档。 –

回答

0

我的回答:

我已经把我的POST请求的全部输出到变量result。 我的令牌的结构必须如下所示:“持票人令牌字符串”。 所以我把类型为变量result_tokentype和令牌串入变量result_accesstoken。 最后,我把它们一起放入变量accessToken

result_tokentype = result["token_type"] 
result_accesstoken = result["access_token"] 
accessToken = str(result_tokentype) + " " + str(result_accesstoken) 

现在,我在正确的结构完整的字符串,我可以用这个变量下一个请求,例如:

url = "https://myurl.com" 
headers = {"Authorization": accessToken, "key1": "value1", "Content-Type": "application/json" } 
conn.request("GET", url, headers=headers) 

这在这里为我工作最好。