求助python3 302重定向 鎐ookie问题

如题所述

通过昨天写的python脚本,我已经注册激活了50个box.net账号,用作上传文件。
今天我继续写代码,用来自动登录box.net并获取所有文件的分享链接。
不过测试的时候出现了点问题,账号信息正确,但总是登录不成功。
headers中referer、user-agent都有伪造,cookie也有发送。
通过设置debuglevel=1跟踪http请求,最终发现了问题:

1
2
3

httpHandler = urllib2.HTTPHandler(debuglevel=1)
httpsHandler = urllib2.HTTPSHandler(debuglevel=1)
self.opener = urllib2.build_opener(httpHandler, httpsHandler)

urllib2很聪明,在发现HttpResponse中有重定向(301, 302)时会自动转向请求这个新的URL,
但urllib2有个严重的问题,它没有带着cookie去请求新的URL。
这也是说,前期我们通过一个POST请求来获取cookie(对应着服务器上的session),
但urllib2却没有带着必要的cookie去访问需要授权的页面。
一开始我是想直接用httplib的,考虑到前后一致性才全部用urllib2,结果urllib2又出问题。。。
解决这个问题,可以:
1. 换httplib来实现,它不会像urllib2会自动处理重定向,cookie不会丢
2. 截获重定向,禁止urllib2自动处理
我选择了重写urllib2.HTTPRedirectHandler的http_error_302方法,截获302,让urllib2不再处理302:

1
2
3

class HttpRedirect_Handler(urllib2.HTTPRedirectHandler):
def http_error_302(self, req, fp, code, msg, headers):
pass

然后在urllib2.build_opener方法中用HttpRedirect_Handler的一个实例做参数,例如:

1
2

self.opener = urllib2.build_opener(HttpRedirect_Handler(),
urllib2.HTTPCookieProcessor(self.cookie))

这样,当我们用上述opener去POST登录时,遇到302就不会再自动转向了,
登录成功获取到的cookie也不会丢。
后面再带着self.cookie去请求需要授权的页面,就可以获取到正确的内容了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-08-04
1、查看用户的proifle是哪个,一般是default: sql>SELECT username,PROFILE FROM dba_users;
2、查看指定概要文件(如default)的密码有效期设置: sql>SELECT * FROM dba_profiles s WHERE s.profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME';
3、将密码有效期由默认的180天修改成“无限制”: sql>ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED; 修改之后不需要重启动数据库,会立即生效。本回答被网友采纳
相似回答