如何以Python

时间:2015-05-04 07:24:59

标签: python python-requests

我已成功使用python登录到站点并发送带有用户名和密码作为有效负载的POST请求。

当我在浏览器中访问同一网站时,该网站会通知我某人当前已登录我的帐户(猜猜是谁)。

我的问题是:如何退出请求会话?

到目前为止,我已经尝试在stackoverflow上找到此问题后使用c.cookies.clear()清除cookie:Clear cookies from Requests Python

我已经确认已创建Cookie然后被清除,但随后在使用浏览器时仍会遇到相同的登录重复。

我已经检查了请求文档和之前的一些问题,但我找不到答案。

供您参考,我已粘贴以下代码的一般版本。

另外,对于您的信息,当我注销浏览器时,会发送GET请求。这是我需要解决的问题吗?我已经尝试将其与cookie一起发送,但结果相同。这看起来应该很简单。目前我可以通过浏览器注销来使用它,但长期来看会很痛苦。

非常感谢您的协助。干杯,干得好。

import requests

payload = {'userid': 'my username value', 
           'passwd': 'my password value'
}

with requests.Session() a c:
    c.post('http://www.examplewebsite.com/login.html', data = payload)
    print 'cookies', requests.utils.dict_from_cookiejar(c.cookies)
    c.cookies.clear()
    print 'cookies', requests.utils.dict_from_cookiejar(c.cookies)

2 个答案:

答案 0 :(得分:4)

如果网站上有一个要求您退出的API,requests就不可能知道。您必须明确提出logout API请求。

虽然requests有一个名为Session的东西,而且许多Web服务框架也是如此,但会话实际上并不是两个计算机之间的持久连接,如TCP套接字。

  • Web服务框架会话本质上只是一种在cookie中来回传递ID到客户端并将其映射到某个数据库记录或等效的方法。它仍然只能一次看到一个请求,除非你告诉它,它知道你完成的唯一方法就是暂时没有看到你的会话ID。
  • requests会话基本上只是一个以浏览器的方式在多个请求中存储cookie的地方,因此Web服务框架的会话将以与在浏览器中相同的方式工作。

因此,清除cookie不会对服务器可见的任何内容执行任何操作。除了您发送的请求之外,服务器无法看到您执行的任何操作。

答案 1 :(得分:0)

听起来很简单,我通过集成睡眠语句,然后是注销页面的get请求,成功注销了会话,即:

 @Override
    public synchronized void setProgress(int progress) 
    { 
        super.setProgress(progress); 
        onSizeChanged(getWidth(), getHeight(), 0, 0); 
    }