从GET cookie中检索没有cookie

时间:2014-09-20 16:03:13

标签: python cookies session-cookies urllib2 urllib

当我尝试获取响应实例的set cookie时,当我使用我的实际登录用户名和密码时,我会得到一个None值。

import urllib2, urllib, cookielib 

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

data = urllib.urlencode({'email':'user@hotmail.com','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的None值。我如何获得cookie?

2 个答案:

答案 0 :(得分: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 :(得分:1)

Cookie将在第一个响应中设置,您正在测试第二个响应。 Facebook不会在这里设置另一个 cookie。

您可以从CookieJar对象获取Cookie:

cookie = list(cookie.cookiejar)[0]

如果您使用request library代替,那么您可以轻松一点时间:

import requests

session = requests.Session()

data = {'email':'user@hotmail.com','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']