Python:Cookie不会在请求之间保持不变

时间:2013-09-15 11:41:06

标签: python python-2.7 python-requests

我正在使用此代码登录网站。在POST请求之后,网站重定向到个人资料页面,我可以看到我已经登录。但是下一个请求不会让我登录,即使我存储了cookie。这并不是关于pastebin网站的,所以请不要告诉我使用他们的API

def web_login(username,password):
        LOGIN_URL = 'http://pastebin.com/login.php'
        HOME_URL = 'http://pastebin.com/'
        jar = cookielib.CookieJar()
        payload = {"user_name":username,"user_password":password,"submit_hidden":"submit_hidden"}
        s = requests.Session()
        user_agent = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:23.0) Gecko/20100101 Firefox/23.0'}
        r = s.post(LOGIN_URL,data=payload,headers=user_agent,cookies=jar)
        r = s.get(HOME_URL,headers=user_agent,cookies=jar)        
        print r.text

1 个答案:

答案 0 :(得分:3)

正如@falsetru指出你的问题是使用外部cookie jar。原因是每个Session对象都有自己的cookie jar,并会自动为您存储它们。将值传递给cookies会告诉Session更喜欢jar而不是内部jar。如果你想要更明确,你可以这样做:

r = s.post(LOGIN_URL, data=payload, headers=user_agent)
jar = r.cookies
home = s.get(HOME_URL, headers=user_agent, cookies=jar)

另一件需要注意的事情是,如果您每次都可以发送相同的标题:

s = requests.Session()
s.headers.update(user_agent)
r = s.post(LOGIN_URL, data=payload)
home = s.get(HOME_URL)

我希望这可以帮助你理解为什么@falsetru告诉你的工作,并帮助其他人来看看这个。

我还应该指出,如果你想使用提供与cookielib.CookieJar相同界面的自定义cookie jar,你也可以这样做:

jar = MyCookieJar()
s = requests.Session()
s.cookies = jar
r = s.post(LOGIN_URL, data=payload)
home = s.get(HOME_URL)

然后,您可以通过jars.cookies访问Cookie。