在PostMan中传递REST API身份验证令牌,但在Python请求中不传递



我正在尝试使用Python请求通过REST API访问一些信息。我正在使用的API需要身份验证,并且在登录请求之后,响应将包含一个会话ID,然后该会话ID将包含在所有未来请求的头中。API文件规定:

身份验证成功后,将返回带有访问令牌的JSON响应。这个需要在所有成功处理它们的后续请求。API客户端应添加一个HTTP具有名称的标题";blabla_session_id";,与Web应用程序中的cookie名称相同

我能够成功地发送登录请求并接收带有会话ID的响应,但是我在使用Python请求将会话ID添加到标头时遇到了问题。我正在使用以下代码:

# Functions
def login(base_url, username, password):
print("Getting token...")
header = {'content-type':'application/json'}
data_get = {'email': username,
'password':password,
'workspaceId':12345678} 
r = requests.post(base_url+'login', headers=header, json=data_get)
if r.ok:
print("Login Success!")
global session_id   
session_id = r.cookies['blabla_session_id']
print("Session ID is %s" %session_id)
else:
print("Login Fail...")
print("HTTP %i - %s, Message %s" % (r.status_code, r.reason, r.text))
def logout():
header = {'blabla_session_id':session_id,'content-type':'application/json'}
print (header)
r = requests.put(base_url+'logout', headers=header)
print (r.request.headers)
if r.ok:
print("Logout Success")
else:
print("Logout Failed")
print("HTTP %i - %s, Message %s" % (r.status_code, r.reason, r.text))
def main():
login(base_url, api_login, api_password)
logout()
# Main Program
main()

当我执行此操作时,我得到以下响应:

Getting token...
Login Success!
Session ID is LABS-FReGnWuzzj7oYQ4nzPdvB55rOpctU48s%7C
{'blabla_session_id': 'LABS-FReGnWuzzj7oYQ4nzPdvB55rOpctU48s%7C', 'content-type': 'application/json'}
{'User-Agent': 'python-requests/2.25.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'blabla_session_id': 'LABS-FReGnWuzzj7oYQ4nzPdvB55rOpctU48s%7C', 'content-type': 'application/json', 'Content-Length': '0'}
Logout Failed
HTTP 401 - , Message {"status":401,"errors":[{"code":401,"message":"There is no access token associated with this request or the access token is not valid."}]}

命令行响应

你知道我哪里错了吗?正如标题所示,我确实尝试使用PostMan来验证API,并且我能够登录,将会话ID添加到头部并注销而不会出现问题。我怀疑这与标头的格式有关,但我不确定。

移动到使用单个请求session,这将在所有http操作中传播特别的cookie,确保成功的身份验证传递到所有请求中。

例如:

import requests
def login(s,base_url, username, password):
print("Getting token...")
header = {'content-type':'application/json'}
data_get = {'email': username,
'password':password,
'workspaceId':12345678} 
r = s.post(base_url+'login', headers=header, json=data_get)
if r.ok:
print("Login Success!")
global session_id   
session_id = r.cookies['blabla_session_id']
print("Session ID is %s" %session_id)
else:
print("Login Fail...")
print("HTTP %i - %s, Message %s" % (r.status_code, r.reason, r.text))
def logout(s):
header = {'blabla_session_id':session_id,'content-type':'application/json'}
print (header)
r = s.put(base_url+'logout', headers=header)
print (r.request.headers)
if r.ok:
print("Logout Success")
else:
print("Logout Failed")
print("HTTP %i - %s, Message %s" % (r.status_code, r.reason, r.text))
def main():
s = requests.session()
login(s,base_url, api_login, api_password)
logout(s)
# Main Program
main()

相关内容

最新更新