【问题标题】:How to clear cookies in WebKit?如何清除 WebKit 中的 cookie?
【发布时间】:2010-09-13 23:37:18
【问题描述】:

我目前正在 python (http://live.gnome.org/PyWebKitGtk) 中使用 PyWebKitGtk。我想在我自己的小浏览器中清除所有 cookie。我发现了有趣的方法 webkit.HTTPResponse.clearCookies() 但我不知道如何着手处理 HTTPResponse 对象的实例:/

我不想为该任务使用 java 脚本。

【问题讨论】:

  • 您使用的是哪个 Python WebKit API?
  • 嗯——你的意思是旧的 webware 的一部分,它被(或曾经)称为 webkit,服务器端;或者,非常流行的浏览器构建/渲染工具包,例如Safari 和 Chrome,并通过 Qt、Gtk、wx 等多种方式与 Python(客户端)接口?当然,这会产生巨大的差异(例如,如果是服务器端,为什么要首先保留 cookie 以及如何保留?毫不奇怪,从服务器的角度来看,cookie 仅存在于 Http 请求和响应中……!),包括,如果是客户端,您使用的是什么 GUI 工具包 - 所以请澄清!
  • 问题是关于 PyWebKitGtk (live.gnome.org/PyWebKitGtk),很抱歉 :)

标签: python cookies webkit


【解决方案1】:

如果您查看GitHub 上绑定的当前状态,您会看到 PyWebKitGTK doesn't yet provide 正是您想要的——它看起来不像 HTTPResponse 类型的映射。不幸的是,我认为 Javascript 或代理是您目前唯一的选择。

编辑:

...当然,除非您希望它真正不好,并且熬夜学习 ctypes。在这种情况下,你可以施展魔法。要清除所有浏览器的 cookie,试试这个。

import gtk, webkit, ctypes

libwebkit = ctypes.CDLL('libwebkit-1.0.so')
libgobject = ctypes.CDLL('libgobject-2.0.so')
libsoup = ctypes.CDLL('libsoup-2.4.so')

v = webkit.WebView()

#do whatever it is you do with WebView...
....

#get the cookiejar from the default session
#(assumes one session and one cookiesjar)
generic_cookiejar_type = libgobject.g_type_from_name('SoupCookieJar')
cookiejar = libsoup.soup_session_get_feature(session, generic_cookiejar_type)

#build a callback to delete cookies
DEL_COOKIE_FUNC = ctypes.CFUNCTYPE(None, ctypes.c_void_p)
def del_cookie(cookie):
    libsoup.soup_cookie_jar_delete_cookie(cookiejar, cookie)

#run the callback on all the cookies
cookie_list =  libsoup.soup_cookie_jar_all_cookies(cookiejar)
libsoup.g_slist_foreach(cookie_list, DEL_COOKIE_FUNC(del_cookie), None)

编辑:

我自己刚开始需要这个,虽然这是一个正确的想法,但它需要工作。相反,试试这个 - 函数类型和 cookiejar 访问是固定的。

#add a new cookie jar
cookiejar = libsoup.soup_cookie_jar_new()

#uncomment the below line for a persistent jar instead
#cookiejar = libsoup.soup_cookie_jar_text_new('/path/to/your/cookies.txt',False)

libsoup.soup_session_add_feature(session, cookiejar)

#build a callback to delete cookies
DEL_COOKIE_FUNC = ctypes.CFUNCTYPE(ctypes.c_int, ctypes.c_void_p, ctypes.c_void_p)
def del_cookie(cookie, userdata):
    libsoup.soup_cookie_jar_delete_cookie(cookiejar, cookie)
    return 0

#run the callback on all the cookies
cookie_list =  libsoup.soup_cookie_jar_all_cookies(cookiejar)
libsoup.g_slist_foreach(cookie_list, DEL_COOKIE_FUNC(del_cookie), None)

请注意,您应该只在使用 WebView之前执行此操作,或者可能在 WebKit 回调中执行此操作,否则您将遇到超出通常与 GTK 编程相关的线程问题。

【讨论】:

  • 虽然我已经完成了所有这些,但我担心您的意思是仅针对特定的请求/响应,这将完全不同 =/
猜你喜欢
  • 2012-05-23
  • 2017-07-15
  • 2014-01-26
  • 1970-01-01
  • 1970-01-01
  • 2017-08-14
  • 2022-05-12
  • 2013-08-18
  • 1970-01-01
相关资源
最近更新 更多