代码之家  ›  专栏  ›  技术社区  ›  jahmax

如何在python的多个请求中使用相同的cookie?

  •  1
  • jahmax  · 技术社区  · 14 年前

    我正在使用此代码:

    def req(url, postfields):
        proxy_support = urllib2.ProxyHandler({"http" : "127.0.0.1:8118"})
        opener = urllib2.build_opener(proxy_support) 
        opener.addheaders = [('User-agent', 'Mozilla/5.0')]
        return opener.open(url).read()
    

    创建一个简单的HTTP GET请求(使用TOR作为代理)。

    现在我想知道如何使用同一个cookie发出多个请求。

    例如:

    req('http://loginpage', 'postfields')
    source = req('http://pageforloggedinonly', 0)
    #do stuff with source
    req('http://anotherpageforloggedinonly', 'StuffFromSource')
    

    我知道我的函数req还不支持post,但是我已经使用httplib发送了postfields,所以我想我自己能理解,但是我不理解如何使用cookie,我看到了一些例子,但是它们都是一个请求,我想在随后的请求中重用第一个登录请求中的cookie,或者保存/使用cookie。一个锉刀(就像curl做的那样),可以让一切变得更简单。

    我发布的代码只是为了说明我正在尝试实现的目标,我想我将使用httplib(2)作为最终的应用程序。

    更新:

    cookielib.lwpcookiejar工作得很好,下面是我为测试做的一个示例:

    import urllib2, cookielib, os
    
    def request(url, postfields, cookie):
        urlopen = urllib2.urlopen
        cj = cookielib.LWPCookieJar()
        Request = urllib2.Request
    
        if os.path.isfile(cookie):
            cj.load(cookie)
    
        opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
        urllib2.install_opener(opener)
        txheaders =  {'User-agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'}
    
        req = Request(url, postfields, txheaders)
        handle = urlopen(req)
        cj.save(cookie)
        return handle.read()
    
    print request('http://google.com', None, 'cookie.txt')
    
    1 回复  |  直到 14 年前
        1
  •  2
  •   ars    14 年前

    这个 cookielib 模块就是你需要做的。有一个不错的 tutorial 有一些代码示例。