2014-09-20 36 views
0

當我嘗試獲取響應實例的設置cookie時,當使用我的實際登錄用戶名和密碼時,我會得到一個無值。從GET cookie中檢索沒有cookie

import urllib2, urllib, cookielib 

jar = cookielib.CookieJar()                               
cookie = urllib2.HTTPCookieProcessor(jar)                                
opener = urllib2.build_opener(cookie) 

data = urllib.urlencode({'email':'[email protected]','pass':'password','login':'Log+In'}) 
req = urllib2.Request('http://www.facebook.com/login.php') 
response = opener.open(req, data) 
response = opener.open(req, data) #I open it twice on purpose 

if "Logout" in response.read(): 
    print("Logged In") 
else: 
    print("Not Logged In") 

cookie_header = response.headers.get("Set-Cookie") 
print(cookie_header) 

我知道如何設置cookie頭,但問題是沒有價值被分配當我用我的實際憑據cookie_header。我如何獲取cookie?

+1

該Cookie會一直在** first **'opener.open()'連接上設置。 「res」在哪裏設置? – 2014-09-20 16:06:13

+0

只需使用'requests'和它的[會話支持](http://docs.python-requests.org/en/latest/user/advanced/),而不是用手爭吵這些東西。 – 2014-09-20 16:12:42

+0

@MartijnPieters對不起,這是假設是響應。 – user3818650 2014-09-20 16:35:59

回答

1

通過重新安排代碼,我能夠修復它。

response = opener.open(req, data) 
cookie_header = response.headers.get("Set-Cookie") 
response = opener.open(req, data) #I open it twice on purpose 

因爲cookie是在第一次打開時設置的。

1

該cookie將被設置在的第一個響應中,您正在測試第二個。 Facebook不會在這裏設置另一個 Cookie。

你可以只得到了CookieJar對象的cookie:

cookie = list(cookie.cookiejar)[0] 

你會擁有它可以更容易,如果你使用的request library代替:

import requests 

session = requests.Session() 

data = {'email':'[email protected]','pass':'password','login':'Log+In'} 
form = session.get('http://www.facebook.com/login.php') 
response = session.post('http://www.facebook.com/login.php', data/data) 
cookie_value = session.cookie['datr']