首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python - urllib2 & cookielib

Python - urllib2 & cookielib
EN

Stack Overflow用户
提问于 2011-01-03 16:15:49
回答 3查看 28.8K关注 0票数 22

我试图打开以下网站,检索初始cookie,并将其用于第二个url-open,但如果您运行以下代码,它将输出2个不同的cookie。如何使用第二个url-open的初始cookie?

代码语言:javascript
复制
import cookielib, urllib2

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))

home = opener.open('https://www.idcourts.us/repository/start.do')
print cj

search = opener.open('https://www.idcourts.us/repository/partySearch.do')
print cj

每次输出都会显示2个不同的cookie,如您所见:

代码语言:javascript
复制
<cookielib.CookieJar[<Cookie JSESSIONID=0DEEE8331DE7D0DFDC22E860E065085F for www.idcourts.us/repository>]>
<cookielib.CookieJar[<Cookie JSESSIONID=E01C2BE8323632A32DA467F8A9B22A51 for www.idcourts.us/repository>]>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-04 08:48:27

这不是urllib的问题。这个网站做了一些时髦的事情。你需要为它请求几个样式表来验证你的会话id:

代码语言:javascript
复制
import cookielib, urllib2

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
# default User-Agent ('Python-urllib/2.6') will *not* work
opener.addheaders = [
    ('User-Agent', 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.11) Gecko/20101012 Firefox/3.6.11'),
    ]


stylesheets = [
    'https://www.idcourts.us/repository/css/id_style.css',
    'https://www.idcourts.us/repository/css/id_print.css',
]

home = opener.open('https://www.idcourts.us/repository/start.do')
print cj
sessid = cj._cookies['www.idcourts.us']['/repository']['JSESSIONID'].value
# Note the +=
opener.addheaders += [
    ('Referer', 'https://www.idcourts.us/repository/start.do'),
    ]
for st in stylesheets:
    # da trick
    opener.open(st+';jsessionid='+sessid)
search = opener.open('https://www.idcourts.us/repository/partySearch.do')
print cj
# perhaps need to keep updating the referer...
票数 21
EN

Stack Overflow用户

发布于 2011-01-03 17:37:43

不是一个实际的答案(但对于评论来说太长了);可能对其他试图回答这个问题的人有用。

尽管我尽了最大的努力,我还是想不通。

在Firebug中,对于Firefox,cookie似乎保持不变(工作正常)。

我添加了urllib2.HTTPSHandler(debuglevel=1)来调试Python发送的头文件,它似乎确实重新发送了cookie。

我还添加了所有的Firefox请求头,看看这是否有帮助(它没有):

代码语言:javascript
复制
opener.addheaders = [
    ('User-Agent', 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13'),
    ..
]

我的测试代码:

代码语言:javascript
复制
import cookielib, urllib2

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj), urllib2.HTTPSHandler(debuglevel=1))
opener.addheaders = [
    ('User-Agent', 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13'),
    ('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'),
    ('Accept-Language', 'en-gb,en;q=0.5'),
    ('Accept-Encoding', 'gzip,deflate'),
    ('Accept-Charset', 'ISO-8859-1,utf-8;q=0.7,*;q=0.7'),
    ('Keep-Alive', '115'),
    ('Connection', 'keep-alive'),
    ('Cache-Control', 'max-age=0'),
    ('Referer', 'https://www.idcourts.us/repository/partySearch.do'),
]

home = opener.open('https://www.idcourts.us/repository/start.do')
print cj

search = opener.open('https://www.idcourts.us/repository/partySearch.do')
print cj

我觉得我漏掉了一些明显的东西。

票数 7
EN

Stack Overflow用户

发布于 2011-01-03 17:04:28

我认为,这是服务器的问题,它为每个请求设置一个新的cookie。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4582964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档