我正在尝试做API请求,我需要API键到不同的视图。我正在尝试使用session变量,但密钥似乎是其他格式的,而不是尝试使用Sqlite数据库中的变量API请求使用数据库中的密钥,但不使用会话变量
如何从数据库和会话中获取API密钥:
key_session = request.session['key']
key_db = APIkey.objects.values_list('key', flat=True).get(pk=2)
当我打印它们时,它们都返回相同的值。关键示例:
3h3asdh-asdasd:oisf87sdf87a5df76asdf83jhjhasgd8
尝试使用密钥对API服务进行身份验证时,我正在使用base64.encodestring函数:
query = request.GET.get('query')
url = urllib2.Request('https://api.someapiwebsite.com',
None, headers={'Content-Type':'application/json'})
base64string = base64.encodestring('%s' % (key_session)).replace('\n', '')
如果我用会话变量(key\u session)打印base64string,我会得到:
MmoihjsdasdoihhaG5tbjpuq9876eq9asd98a7Nmd3dWYzN2JmbWZ2aW1nMGVw==
如果我打印带有会话变量(key\u db)的base64string,唯一的区别是最后两个字符==现在是'IC',我想这就是API验证服务失败的原因:
MmoihjsdasdoihhaG5tbjpuq9876eq9asd98a7Nmd3dWYzN2JmbWZ2aW1nMGVwIC
base64编码字符串中的差异是什么
编辑:
我可以看出使用print repr()时的区别:
print repr(key_db)
3h3asdh-asdasd:oisf87sdf87a5df76asdf83jhjhasgd8
print repr(key_session)
3h3asdh-asdasd:oisf87sdf87a5df76asdf83jhjhasgd8\x02\x02
其中一个字符串可能包含一些
print
没有显示的尾随字符。如果您使用repr
,那么您应该能够看到其中的区别然后,您可以在编码字符串之前根据需要去除任何字符,例如:
相关问题 更多 >
编程相关推荐