将base64.encodestring与数据库和会话变量一起使用时返回不同

2024-09-27 00:11:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试做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

Tags: keyapi数据库dbgetrequestsession密钥
1条回答
网友
1楼 · 发布于 2024-09-27 00:11:59

其中一个字符串可能包含一些print没有显示的尾随字符。如果您使用repr,那么您应该能够看到其中的区别

print(repr(key_session))
print(repr(key_db))

然后,您可以在编码字符串之前根据需要去除任何字符,例如:

key_session = key_session.rstrip('\x02')

相关问题 更多 >

    热门问题