gpt4 book ai didi

python - python中的 session 身份验证

转载 作者:行者123 更新时间:2023-12-03 23:18:23 27 4
gpt4 key购买 nike

使用来自 requests 的 session python中的模块,似乎 session 仅在第一个请求时才发送授权,我不明白为什么会这样。

import requests
session = requests.Session()
session.auth = (u'user', 'test')
session.verify = False
response = session.get(url='https://my_url/rest/api/1.0/users')

如果我查找此响应请求 header ,我会看到:
{'Authorization': 'Basic auth_data', 'Connection': 'keep-alive', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'User-Agent': 'python-requests/2.12.3'}

但如果我使用相同或不同的 url 发送下一个请求:
response = session.get(url='https://my_url/rest/api/1.0/users')

我可以看到请求中不再有 auth header :
print response.request.headers
{'Connection': 'keep-alive', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'User-Agent': 'python-requests/2.12.3'}

因此,我收到了 401 响应。

为什么会这样? session 不应该在使用它的每个请求中发送身份验证吗?
如何使用 session 发送每个请求的身份验证数据?

最佳答案

当我在您的评论中运行该确切代码时,我看到的是 Authorization第一个 print 中缺少 header ,但它存在于第二个中。这似乎与您报告的问题相反。

这可以通过以下事实来解释:第一个请求由 301 响应重定向,并且 auth header 不会在后续请求中传播到重定向的位置。通过查看 response.history[0].request.headers,您可以看到在初始请求中发送了 auth header 。 .

第二个请求没有被重定向,因为 session 保持与主机的连接打开(由于 Connection: keep-alive header ),所以当您 print response.request.headers 时出现 auth header .

我怀疑你实际上在使用 https://test.com ,但您正在使用的服务器可能正在发生类似的事情。

对于测试,我建议使用非常方便的公共(public)测试 HTTP 服务器 https://httpbin.org/headers .这将在响应正文中返回服务器收到的 header 。您可以使用其中一个重定向 URL 测试重定向请求。

关于python - python中的 session 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44020439/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com