2010-07-24 74 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

相關問題