我的目的是登录网站,然后从 python 脚本访问受保护的图像。我可以通过浏览器进行合法和工作访问。
这就是我现在所拥有的。
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'])
Output:
<<class 'requests.cookies.RequestsCookieJar'>[<Cookie PHPSESSID=664b0842085b847a04d415a22e013ad8 for *domain*/>]>
200
403
<<class 'requests.cookies.RequestsCookieJar'>[]>
664b0842085b847a04d415a22e013ad8
我确信我可以成功登录,因为我在这样做后曾经下载过html文件,并且它是处于登录状态的。但我的问题是,在我看来,我的PHPSESSID
cookie 没有通过,所以我得到了403
错误返回。但我在我的会议中显然有它。我也尝试过手动将 cookie 添加到我的"r_img"
行,这没有什么区别,我仍然得到一个空的CookieJar
and a 403
错误返回。仅使用 requests 模块不可能吗?我是不是忽略了什么?请原谅我不太熟悉HTTP
要求。
我使用 Python 3.4 只是为了清楚起见。
你正在传递你的表单数据 as HTTP 标头。 POST 登录表单应发送表单元素作为data
参数改为:
r_login = s.post('*domain*/user.php',
data={'cmd': 'login', 'loginname': '***', 'password': '***' })
Do 检查返回的尸体,不仅仅是状态代码。您的 POST 请求已被服务器接受(200 OK
)但由于没有发布登录信息,body很可能会告诉您诸如“登录不正确,请重试”之类的信息。
服务器很可能再次清除了 cookie,因为当您请求图像时它不是有效的登录会话。 403 响应可能包含Set-Cookie
标题为PHPSESSID
用过去的日期来清除它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)