gpt4 book ai didi

python - 如何存储要在类内的函数之间使用的cookie jar?

转载 作者:行者123 更新时间:2023-11-28 23:05:39 25 4
gpt4 key购买 nike

我想听听您关于如何有效存储 cookie 的建议,这些 cookie 将在类中由其他函数使用。我当前的代码如下所示:

class SomeClass:
def __init__(self, username, password):
self.logged_in = False
self.username = username
self.password = password
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())
urllib2.install_opener(opener)

def _login(self, username, password):
if not self.logged_in:
params = urllib.urlencode({'username': username, 'password': password})
conn = urllib2.Request('http://somedomain.com/login', params)
urllib2.urlopen(conn)
self.logged_in = True

def _checkLogin(self):
if not self.logged_in:
self._login(self.username, self.password)

def doSomeStuffThatRequireCookies(self):
self._checkLogin()
data = urllib2.urlopen(conn).read()
return data

虽然上面的示例有效,但如果我不想使用 cookie 发出请求,我必须构建自定义 Request(),并且我确信必须有更好、更优雅的方法来执行此操作。

谢谢。

最佳答案

首先,正如 jathanism 所注意到的,您实际上并没有安装 cookie jar。

import cookielib
...

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar()))

然后,urllib2.install_opener(opener) 将全局安装开启器(!),您不需要这样做。删除 urllib2.install_opener(opener)。

对于非 cookie 请求,执行此操作:

你不需要构建 Request 对象,你可以只用 url 和 params 调用 urlopen:

params = urllib.urlencode({'username': username, 'password': password})
urllib2.urlopen('http://somedomain.com/login', params)

对于 cookie 请求,使用 opener 对象:

self.opener.urlopen(url, data)

关于python - 如何存储要在类内的函数之间使用的cookie jar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5825957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com