Python:请求 session 登录 Cookie

标签 python http cookies authentication python-requests

我的目的是登录到一个站点,然后从 python 脚本访问 protected 图像。我可以通过浏览器进行合法访问和工作访问。

这就是我现在拥有的。

import requests

s = requests.Session()

s.get('*domain*')

r_login  =s.post('*domain*/user.php', headers={'cmd': 'login', 'loginname': '***', 'password': '***' })

print (s.cookies)
print (r_login.status_code)

r_img = s.get('*domain*/*protectedimage*.jpg')
print (r_img.status_code)
print (r.cookies)

print (s.cookies['PHPSESSID'])

输出:

<<class 'requests.cookies.RequestsCookieJar'>[<Cookie PHPSESSID=664b0842085b847a04d415a22e013ad8 for *domain*/>]>
200
403
<<class 'requests.cookies.RequestsCookieJar'>[]>
664b0842085b847a04d415a22e013ad8

我确定我可以成功登录,因为我曾经下载过 html 文件,并且是登录的形式。但我的问题是,在我看来,我的 PHPSESSID cookie 没有通过,所以我收到了 403 错误。但我显然在我的 session 上有它。我也尝试将 cookie 手动添加到我的 "r_img" 行,但没有任何区别,我仍然得到一个空的 CookieJar 和一个 403 返回错误。仅使用请求模块是不可能的吗?我忽略了什么吗?请原谅我对 HTTP 请求不是很熟悉。

为了清楚起见,我使用 Python 3.4。

最佳答案

您正在将您的表单数据作为HTTP header 传递。 POST 登录表单应该将表单元素作为 data 参数发送:

r_login = s.post('*domain*/user.php', 
                 data={'cmd': 'login', 'loginname': '***', 'password': '***' })

检查返回的正文,而不仅仅是状态代码。您的 POST 请求已被服务器接受 (200 OK),但由于没有发布登录信息,body 很可能会告诉您“登录不正确,请重试” ".

当您请求图像时,服务器很可能再次清除了 cookie,因为它不是有效的登录 session 。 403 响应可能包含 PHPSESSIDSet-Cookie header 以及过去的日期以清除它。

关于Python:请求 session 登录 Cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24260149/

相关文章:

python - 如何控制Peewee中相关模型获取的字段名称?

Python:如何将 ggplot 与简单的 2 列数组一起使用?

python - 流式 json 解析器

javascript - 我无法使用 perl 脚本获取网站内容

python - 如何使用Python中的GitPython包在每次提交时制作GitHub存储库的副本

javascript - NodeJS HTTP请求未按顺序执行

c# HTTP POST——需要跟踪发布/上传进度

Angular 7 - 如何在某些响应状态代码上重试 http 请求?

session - Tomcat cookies是如何形成的?

image - 防止 session 过期?