我已成功使用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)
答案 0 :(得分:4)
如果网站上有一个要求您退出的API,requests
就不可能知道。您必须明确提出logout
API请求。
虽然requests
有一个名为Session
的东西,而且许多Web服务框架也是如此,但会话实际上并不是两个计算机之间的持久连接,如TCP套接字。
requests
会话基本上只是一个以浏览器的方式在多个请求中存储cookie的地方,因此Web服务框架的会话将以与在浏览器中相同的方式工作。因此,清除cookie不会对服务器可见的任何内容执行任何操作。除了您发送的请求之外,服务器无法看到您执行的任何操作。
答案 1 :(得分:0)
听起来很简单,我通过集成睡眠语句,然后是注销页面的get请求,成功注销了会话,即:
@Override public synchronized void setProgress(int progress) { super.setProgress(progress); onSizeChanged(getWidth(), getHeight(), 0, 0); }