2

我对 python 还是很陌生,现在尝试用 urllib2 发送一个 cookie 让我很震惊几天。所以,基本上,在我想要获取的页面上,我从萤火虫看到有一个“发送的 cookie”,它看起来像:

 list_type=height

..它基本上按一定顺序排列页面上的列表。

我想通过 urllib2 发送上面的 cookie 信息,以便呈现的页面使上面的设置生效 - 这是我试图编写的使其工作的代码:

class Networksx(object):
    def __init__(self):
        self.cj = cookielib.CookieJar()
        self.opener = urllib2.build_opener\
                #socks handler
        self.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-Charset', 'ISO-8859-1,utf-8;q=0.7,*;q=0.7'),
        ('Keep-Alive', '115'),
        ('Connection', 'keep-alive'),
        ('Cache-Control', 'max-age=0'),
        ('Referer', 'http://www.google.com'),
        ("Cookie", {"list_type":"height"}),
    ]
    urllib2.install_opener(self.opener)
    self.params = { 'Set-Cookie': "list_type":"height"}
    self.encoded_params = urllib.urlencode( self.params )

    def fullinfo(self,url):
        return self.opener.open(url,self.encoded_params).read()

..如您所见,我尝试了几件事:

  • 通过标头设置参数
  • 设置 cookie

但是,这些似乎并没有按照我的意愿以特定的 list_order (高度)呈现页面。我想知道是否有人可以为我指出如何使用 urllib2 发送 cookie 信息的正确方向

谢谢。

4

2 回答 2

5

生成 cookie.txt 的简单方法是这个 chrome 扩展:https ://chrome.google.com/webstore/detail/cookietxt-export/lopabhfecdfhgogdbojmaicoicjekelh

import urllib2, cookielib

url = 'https://example.com/path/default.aspx'
txheaders =  {'User-agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'}

cj = cookielib.LWPCookieJar()
# cj.load signature: filename=None, ignore_discard=False, ignore_expires=False
cj.load('/path/to/my/cookies.txt') 

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
urllib2.install_opener(opener)

req = urllib2.Request(url, None, txheaders)
handle = urllib2.urlopen(req)

[更新]

抱歉,我是从一个早已被遗忘的旧代码片段中粘贴的。从 LWPCookieJar 文档字符串:

LWPCookieJar 保存一系列“Set-Cookie3”行。"Set-Cookie3" 是 libwww-perl 库使用的格式,不知道与任何浏览器兼容,但它易于阅读并且不会丢失有关 RFC 2965 cookie 的信息。

所以它与现代浏览器生成的 cookie.txt 不兼容。如果您尝试加载它,您将获得:LoadError: 'cookies.txt' does not look like a Set-Cookie3 (LWP) format file.

您可以作为 OP 执行并转换文件:

chrome 扩展的输出格式有问题。我刚刚搜索了 lwp 问题,发现:code.activestate.com/recipes/302930-cookielib-example 代码以 lwp 格式吐出 cookie,然后我按照您的步骤进行操作。-詹姆斯 W

您也可以使用此Firefox 插件,然后使用“工具->导出 cookie”。确保 cookies.txt 文件的第一行是“#Netscape HTTP Cookie File”并使用:

cj = cookielib.MozillaCookieJar('/path/to/my/cookies.txt')
cj.load() 
于 2013-03-09T15:40:36.000 回答
0

You would better look into the 'request' module for Python making HTTP much easier approachable than through the low-level urllib modules.

See

http://docs.python-requests.org/en/latest/user/quickstart/#cookies

于 2013-03-09T15:28:17.810 回答