为何 urllib2 处理 302 跳转后不带 cookie 呢?

2014 年 12 月 29 日
 garth
在模拟登录时,经常遇到302,偏偏urllib2不继续带着cookie,我就是想让它带着cookie啊。
7160 次点击
所在节点    Python
14 条回复
Septembers
2014 年 12 月 29 日
requests
winkidney
2014 年 12 月 29 日
使用cookie_jar build_opener
pc10201
2014 年 12 月 29 日
requests也不带~
zwzmzd
2014 年 12 月 29 日
试试下面的代码,就是创建一个带cookie处理器的opener
# 用于Cookies维持
cookies = urllib2.HTTPCookieProcessor()
opener = urllib2.build_opener(cookies)

# 发送一个post请求,注意提交数据的编码encode位置
data = [\
('methord', 'CheckIsHightLeader'),\
('leaderNae', LEADER.encode('utf-8'))\
]
request = urllib2.Request(\
url = url,\
data = urllib.urlencode(data)\
)
opener.open(request, timeout = 10).read()
garth
2014 年 12 月 29 日
@Septembers
@winkidney
@pc10201
@zwzmzd
感谢各位回复。我是使用了opener,但是遇到302跳转时,不会将cookie带到302跳转之后的页面。
mhycy
2014 年 12 月 29 日
那么为了避开这个BUG每次都手工跳转好了...
garth
2014 年 12 月 29 日
@mhycy come on 像登录这些常是302跳转的,要是解决这个问题,可以省很多步骤嘛
R4rvZ6agNVWr56V0
2014 年 12 月 29 日
class HTTPRedirectHandler(urllib2.HTTPRedirectHandler):

def http_error_302(self, req, fp, code, msg, headers):
return urllib2.HTTPRedirectHandler.http_error_302(self, req, fp, code, msg, headers)

jar = cookielib.MozillaCookieJar('/tmp/sina_cookie_output.txt')
opener = urllib2.build_opener(HTTPRedirectHandler, urllib2.HTTPCookieProcessor(jar))
Septembers
2014 年 12 月 29 日
garth
2014 年 12 月 29 日
ahcat
2014 年 12 月 29 日
Requests貌似是带的吧?
http://cn.python-requests.org/zh_CN/latest/user/advanced.html#id2

会话对象让你能够跨请求保持某些参数。它也会在同一个Session实例发出的所有请求之间保持cookies。

s = requests.Session()

s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
r = s.get("http://httpbin.org/cookies")

print(r.text)
# '{"cookies": {"sessioncookie": "123456789"}}'
mengskysama
2014 年 12 月 30 日
我记得requests也有类似问题,在301中set-cookie不会生效,必须手动指定redirects false手动处理这条cookie。
winkidney
2014 年 12 月 30 日
域不同的话,cookie不能同步的。
latyas
2015 年 1 月 6 日
昨晚刚看了一下《HTTP权威指南》,大概是对于跨域了并且服务器返回的set-cookies里没有允许新域访问原域的cookies的话,肯定在新域里是不能带原域的cookies的

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

https://v2ex.xtra.eu.org/t/157532

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

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

© 2021 V2EX