请帮忙看一下这段代码,python中用requests模块保持登录!

2013-08-18 11:47:18 +08:00
 zippera
问题:

1. 可以正常登录,返回的r.html也正常。但是用s访问本站的其他页面时,cookie似乎失效了,百思不得其解。请帮忙修正一下!

2. 下载电子书的时候也要进行登录验证。而下载一般使用urllib.urlretrieve(),怎样跟cookie绑定?

3. 请问它的formhash怎么生成的,可不可以自动计算或获取?

这里注册了一个临时的账号,方便大家直接测试。formhash是通过chrome的开发工具集看到的。

代码如下:

https://gist.github.com/zippera/6259794
4625 次点击
所在节点    Python
6 条回复
iloahz
2013-08-18 12:56:06 +08:00
formhash一般会在form里面吧,解析一些dom或者正则一下提取出来呗
kunimi
2013-08-18 13:13:06 +08:00
formhash挺好找的:
from bs4 import BeautifulSoup
lgurl = 'http://mlook.mobi/member/login'
login_page = s.get(lgurl).content
soup = BeautifulSoup(login_page)
formhash = soup.find_all('input', {'type': 'hidden', 'name': 'formhash'})[0]['value']

Session失效的问题没细看,lz找到答案记得po上来
allenforrest
2013-08-18 13:13:12 +08:00
1、session会保存cookie没问题,但问题可能不一定出在cookie,建议用浏览器(chrome、firefox)抓一下登陆和后续访问其他页面的http消息,然后和用python requests交互的比较一下(requests的可以设置proxies把http重定向到fiddler来抓取),可能网站是判断了其他的http头参数,我之前遇到一个问题就是被判断了referer不正确就拒绝了我的访问,cookie没问题。
2、是否可以用urllib2下载?把requests session的cookie导过来。
zippera
2013-08-18 14:11:05 +08:00
@iloahz
@kunimi
@allenforrest

formhash用bs解决了,多谢!session的问题还是没有头绪。 关于下载,用s.get获取后再用write写入文件行不行?
pythoner
2013-08-18 14:24:38 +08:00
1,我运行了你的代码。post之后没有登陆成功(r.html是一个登陆表单)
2,下载文件不一定非得用urllib.urlretrieve()。requests get到数据后写文件也一样

你应该看看登陆post出去的数据,是不是跟你在浏览器里登陆post出去的数据一致。
zippera
2013-08-18 15:32:42 +08:00
@allenforrest
@pythoner 不好意思,可能是formhash过期了,我修改了上面代码,现在不会存在过期问题了,运行正常。
@kunimi

我使用request.headers发现第二个请求没有伪装成浏览器,修改了一下代码,搞定了.

感谢各位!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/79434

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX