2010-07-24 31 views
1

我使用这个代码:如何在python中的多个请求中使用相同的cookie?

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,但我不不明白如何使用cookies,我看到一些例子,但它们都只是一个请求,我想在第一次登录请求中重复使用后续请求中的cookie,或者从文件中保存/使用cookie(比如curl) ,这会让一切变得更容易。

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

UPDATE:

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') 

回答

2

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

+0

COokielib.LWPCookieJar完成了这项工作,谢谢。 – jahmax 2010-07-24 21:32:23

相关问题