Cookiejar 在开瓶器中的使用

发布于 2024-12-22 20:10:32 字数 346 浏览 1 评论 0原文

我现在有以下代码:

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 )

现在我稍后在代码中我不想使用任何 cookie(同时还创建了新的 cookie)。

我可以执行一个简单的 tw_jar.clear() 还是需要再次构建并安装 opener 以删除请求中使用的所有 cookie?

I have the following code at the moment:

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 )

Now I later in my code I don't want to use any of the cookies (Also new cookies created meanwhile).

Can I do a simple tw_jar.clear() or do I need to build and install the opener again to get rid of all cookies used in the requests?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

怂人 2024-12-29 20:10:32

这就是我的 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 实例即可,它将影响所有将来的请求。

This is how HTTPCookieProcessor is defined in my Python installation:

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

As only a reference is saved, you can just manipulate the original tw_jar instance and it will affect all future requests.

中二柚 2024-12-29 20:10:32

如果您不需要任何 cookie,我建议您创建一个新的 opener。然而,如果由于某种原因你想保留旧的,从处理程序列表中删除 cookie 处理器应该可以:

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

If you don't want any cookies, I'd recommend to create a new opener. However, if for some reason you want to keep the old one, removing the cookie processor from the list of handlers should work:

o.handlers = [h for h in o.handlers
              if not isinstance(h, urllib2.HTTPCookieProcessor)]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文