在打开器中使用Cookiejar

2 投票
2 回答
1405 浏览
提问于 2025-04-17 08:48

我现在有以下这段代码:

tw_jar = cookielib.CookieJar()
tw_jar.set_cookie(c1)
tw_jar.set_cookie(c2)

o = urllib2.build_opener( urllib2.HTTPCookieProcessor(tw_jar) )
urllib2.install_opener( o )

现在在我的代码后面,我不想再使用任何的 cookies(包括这段时间新创建的 cookies)。

我可以简单地用 tw_jar.clear() 来清除它们吗?还是说我需要重新构建并安装 opener 才能去掉在请求中使用的所有 cookies?

2 个回答

0

如果你不想要任何 cookies(小甜饼),我建议你创建一个新的打开器。不过,如果你出于某种原因想保留旧的打开器,那么从处理程序列表中移除 cookie 处理器应该可以解决问题:

o.handlers = [h for h in o.handlers
              if not isinstance(h, urllib2.HTTPCookieProcessor)]
2

这是我在Python安装中如何定义HTTPCookieProcessor的:

class HTTPCookieProcessor(BaseHandler):
  def __init__(self, cookiejar=None):
    import cookielib
    if cookiejar is None:
        cookiejar = cookielib.CookieJar()
    self.cookiejar = cookiejar

  def http_request(self, request):
    self.cookiejar.add_cookie_header(request)
    return request

  def http_response(self, request, response):
    self.cookiejar.extract_cookies(response, request)
    return response

  https_request = http_request
  https_response = http_response

因为只保存了一个引用,所以你可以直接操作原来的tw_jar实例,这样会影响到所有后续的请求。

撰写回答