Python 中的 Rest API - 获取身份验证令牌,然后将其设置为用于 POST 的变量

Posted

技术标签:

【中文标题】Python 中的 Rest API - 获取身份验证令牌,然后将其设置为用于 POST 的变量【英文标题】:Rest APIs in Python - Get Authentication token and then set it as a variable to use for POST 【发布时间】:2021-12-17 08:25:12 【问题描述】:

我对 Python 很陌生(请多多包涵),我正在尝试发出 POST 请求以将文件上传到某个 SQL 服务器。一件事真的让我很困惑。

在发出上传文件的 POST 请求之前,我需要通过不同的 POST 请求获取授权令牌。我不想将授权令牌复制并粘贴到我的文件上传脚本中,我只想有一个脚本来获取身份验证令牌并自行使用它......将我从第一个 POST 请求中获得的授权令牌设置为变量,然后再次使用它来自动上传文件的 POST 请求。

FIRST POST 授权请求:

url = '...url'
payload = '...username&password'
headers = '...headers'
response = '"POST", url, headers=headers, data=payload'
#response has extra characters, removing the characters and adding apostrophes to get the authentication token. 
#Also taking out any backslashes, which appear in the response along with front slashes but are not needed
authenticationtoken = "'" + response.text.replace('"ticket":"', ').replace('"', '').replace('\\', '') + "'"

如果我要求打印变量“authenticationtoken”并将响应复制并粘贴到下一部分,一切正常。如果我复制并粘贴此响应并在第二部分将其设置为不同的变量(类似于 a = 'myauthenticationtokenabc/123' 然后在我需要身份验证令牌的地方使用变量“a”),它可以完美运行。但是,如果我尝试在第二部分中使用变量“authenticationtoken”,则会出现身份验证错误。什么给了?

SECOND POST 文件上传请求(不适用于 authenticationtoken 变量:)

files = 'file': open(r"...path", "rb")
data =  'type':...type, 'parent_id': ...parentid, 'name': 'DummyFile' 
url = "...url"
headers = 'ticket': authenticationtoken 
response = requests.post(url, headers=headers, files=files, data=data)
print cs.text

希望我将所有内容都正确复制到了这篇文章中。一切正常,但前提是我从第一部分复制并粘贴 print(authenticationtoken) 的结果并将结果复制并粘贴到第二部分。如果我尝试使用变量,我总是会收到“身份验证错误”(即使脚本在使用变量时没有问题,因为我可以复制和粘贴结果并将其设置为不同的变量并且它可以工作)。任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

我发现了这个问题。在定义“身份验证问题”时,我添加了两个撇号,但这些不是必需的。谢谢:)

【讨论】:

以上是关于Python 中的 Rest API - 获取身份验证令牌,然后将其设置为用于 POST 的变量的主要内容,如果未能解决你的问题,请参考以下文章

Python / Django 中的 REST API

我是否可以使用AAD保护REST API(在春季启动时说)并从该AAD以用户身份访问它

如何从具有基本身份验证的 rest api 获取数据?

从 Django Rest Framework 中的令牌获取经过身份验证的用户

使用 C# REST API 从 TFS 获取用户身份

REST API 的身份管理和身份验证