【问题标题】:Python: Cookies not persisting between requestsPython:Cookie 不会在请求之间持续存在
【发布时间】:2013-09-19 15:43:14
【问题描述】:

我正在使用此代码登录网站。在 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

【问题讨论】:

  • 当您将,cookies=jar 放入postget 时会发生什么?
  • 这样就可以了。谢谢!

标签: python python-2.7 python-requests


【解决方案1】:

正如@falsetru 指出的那样,您的问题是使用外部 cookie 罐。原因是每个 Session 对象都有自己的 cookie jar,并且会自动为您存储它们。将一个值传递给cookies 告诉 Session 更喜欢那个 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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 2019-04-19
    • 2014-08-28
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    相关资源
    最近更新 更多