如何使用 python 请求模块创建自定义标头

Posted

技术标签:

【中文标题】如何使用 python 请求模块创建自定义标头【英文标题】:How to create custom headers with python requests module 【发布时间】:2020-11-22 15:50:35 【问题描述】:

我正在编写一个 python 脚本来执行 OAuth client_credentials 类型授权,并且获取的不记名令牌需要在下一个 URL 请求中作为“Authorization”标头参数传递。

我能够执行获取不记名令牌作为响应我得到一个字符串令牌。现在我需要在下一个请求头中传递这个字符串。下面是代码sn-p

def getOAuthToken():
    ClientAuth = requests.auth.HTTPBasicAuth(ClientId, ClientSecret)
    PostData = "grant_type": "client_credentials"
    TokenResponse = requests.post(TokenUrl, auth=ClientAuth, data=PostData)

    if(TokenResponse.ok):
        print("Token Json response is success")
        print(TokenResponse.content)

    else:
        print("Error in json response")

    TokenJson = TokenResponse.json()
    AccessToken = "Bearer "+TokenJson["access_token"]
    print("AccessToken =",AccessToken)

def GetOAuthJsonResponse(Url, Headers):
    JsonResponse = requests.get(Url, headers=Headers)
    print(JsonResponse.status_code)

    if(JsonResponse.ok):
        print("Token Json response is success")

    else:
        print("Error in json response")

#AccessToken is the Bearer token received from authorization server
#Sample AccessToken will be like "Bearer 123475755959"
Headers = 'Authorization': AccessToken 
GetOAuthJsonResponse(OAuthBaseUrl, Headers)

这样做会得到 401 作为 status_code。 401 表示未经授权的访问。这似乎在将访问令牌添加到标头时做错了。 任何人都可以帮助我吗?

【问题讨论】:

确保您的 AccessToken 如评论所述,格式为“Bearer ” 已验证 AccessToken 的类型为 Bearer 。在我的问题陈述中添加了一个函数定义 【参考方案1】:

授权标头需要类似Bearer <accestoken> 的结果。试试这条线:

Headers = 'Authorization': f"Bearer AccessToken"

这会以正确的格式格式化标题。

【讨论】:

感谢您的快速回复。添加了建议的更改,但仍将 401 视为状态代码。 错误地将访问令牌硬编码为静态值。与上述建议的标题格式一起进行的小修改工作正常。现在正在从经过身份验证的 rest api 获得成功响应。 很高兴我能帮上忙:)

以上是关于如何使用 python 请求模块创建自定义标头的主要内容,如果未能解决你的问题,请参考以下文章

如何使用js或jQuery向ajax请求添加自定义HTTP标头?

如何阻止用户使用 JWT 创建自定义 POST 请求?

如何访问 Django Rest Framework 上的自定义 HTTP 请求标头?

即使使用自定义标头,如何禁用预检请求

如何将自定义 HTTP 请求标头添加到 Thymeleaf 生成的表单或链接?

如何根据请求创建 OWIN 中间件