【问题标题】:Cookiejar use in an opener饼干罐在开瓶器中的使用
【发布时间】:2011-12-21 18:21:12
【问题描述】:

我现在有以下代码:

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() 还是我需要重新构建和安装开启器以摆脱请求中使用的所有cookie?

【问题讨论】:

  • 您是否需要清除旧的 cookie,但仍继续处理新的 cookie 或根本不使用任何 cookie?

标签: python urllib2 cookiejar cookielib


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    如果您不想要任何 cookie,我建议您创建一个新的开瓶器。但是,如果出于某种原因您想保留旧的,从处理程序列表中删除 cookie 处理器应该可以:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-19
      • 2011-05-14
      • 1970-01-01
      • 2012-07-28
      • 1970-01-01
      • 2015-06-06
      • 1970-01-01
      相关资源
      最近更新 更多