当我尝试获取响应实例的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?
答案 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']