2010-09-13 3 views
1

Je travaille actuellement avec PyWebKitGtk en python (http://live.gnome.org/PyWebKitGtk). Je voudrais effacer tous les cookies dans mon propre petit navigateur. J'ai trouvé la méthode intéressante webkit.HTTPResponse.clearCookies() mais je n'ai aucune idée comment poser mes mains sur l'instance de l'objet HTTPResponse:/Comment effacer les cookies dans WebKit?

Je ne voudrais pas utiliser le script java pour cette tâche.

+0

Quelle API WebKit Python utilisez-vous? – llasram

+0

Hmmm - voulez-vous dire la partie du bon vieux webware qui est (ou était) connu sous le nom de webkit, côté serveur; ou, la boîte à outils de construction/rendu de navigateur très populaire qui sous-tend e.g. Safari et Chrome et est interfacé avec Python (côté client) via Qt, Gtk, wx, ...? Cela fait une énorme différence, bien sûr (par exemple, si côté serveur, pourquoi gardez-vous les cookies en premier lieu et comment? Pas surprenant que les cookies sont seulement dans les requêtes Http et les réponses du point de vue d'un serveur ...!), Y compris , si côté client, quelle trousse d'interface graphique utilisez-vous avec elle - alors s'il vous plaît clarifier! –

+0

Question sur PyWebKitGtk (http://live.gnome.org/PyWebKitGtk), désolé à ce sujet :) – BPS

Répondre

0

Si vous regardez l'état actuel des liaisons sur GitHub, vous verrez PyWebKitGTK doesn't yet provide tout à fait ce que vous veux- il n'y a pas le mappage pour le type HTTPResponse il ressemble. Malheureusement, je pense que Javascript ou un proxy sont vos seules options en ce moment.

EDIT:

... à moins, bien sûr, vous voulez réel mauvais et restez dans les ctypes d'apprentissage de nuit. Dans ce cas, vous pouvez faire de la magie. Pour effacer tous les cookies du navigateur, essayez ceci.

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) 

EDIT:

Au début du besoin moi-même, et alors qu'il est la bonne idée qu'il faut travailler. Au lieu de cela, essayez ceci: le type de fonction et l'accès cookiejar sont corrigés.

#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) 

Notez que vous ne devez faire avant à l'aide du WebView, ou peut-être dans callbacks WebKit, ou vous aurez des problèmes de filetage ci-dessus et au-delà de ceux qui sont habituellement associés à la programmation GTK.

+0

Bien que maintenant que j'ai fait tout cela, je suis préoccupé que vous vouliez dire * seulement * pour une demande/réponse spécifique , ce qui serait totalement différent = / –