python 中的会话身份验证

2023-11-23

使用来自的会话requestspython 中的模块,似乎会话仅在第一个请求时发送授权,我不明白为什么会发生这种情况。

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')

如果我查找此响应请求标头,我会看到:

{'Authorization': 'Basic auth_data', 'Connection': 'keep-alive', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'User-Agent': 'python-requests/2.12.3'}

但如果我使用相同或不同的网址发送下一个请求:

response = session.get(url='https://my_url/rest/api/1.0/users')

我可以看到请求中不再有 auth 标头:

print response.request.headers
{'Connection': 'keep-alive', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'User-Agent': 'python-requests/2.12.3'}

因此我收到了 401 响应。

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


当我在您的评论中运行确切的代码时,我看到的是Authorization中缺少标头first print,但它存在于second。这似乎与您报告的问题相反。

这是因为第一个请求由 301 响应重定向,并且 auth 标头不会在后续请求中传播到重定向位置。您可以通过查看来看到 auth 标头是在初始请求中发送的response.history[0].request.headers.

第二个请求不会被重定向,因为会话保持与主机的连接打开(由于Connection: keep-aliveheader),因此当您print response.request.headers.

我怀疑你是否真的在使用https://test.com,但您正在使用的服务器可能会发生类似的情况。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 中的会话身份验证 的相关文章

随机推荐