2012-01-11 17 views
7

Contesto:
Sto lavorando su un accesso di back-end per un consumatore OpenID (StackExchange appunto). Se devo fornire tutti i possibili provider OpenID come opzione per l'utente, allora dovrei simulare l'interazione del browser per l'autenticazione con ciascuno di questi provider prima che potessi inviare l'URL Open ID. Tuttavia, penso che potrei tagliare questo breve accedendo ai cookie esistenti del browser web dell'utente e richiedendo l'autenticazione al consumatore direttamente con l'URL.Come ottenere i cookie dal browser Web con Python?

Problema:
Come accedere ai cookie di web-browser dell'utente? Ho visto pochissime informazioni su come farlo con Python. Questo previous question risponde parzialmente al problema relativo a Firefox, in particolare a the code sample di seguito. Tuttavia, avrei bisogno di accedere ai cookie dai browser Web più comuni utilizzati su Linux, non solo su Firefox.

#! /usr/bin/env python 
# Protocol implementation for handling gsocmentors.com transactions 
# Author: Noah Fontes nfontes AT cynigram DOT com 
# License: MIT 

def sqlite2cookie(filename): 
    from cStringIO import StringIO 
    from pysqlite2 import dbapi2 as sqlite 

    con = sqlite.connect(filename) 

    cur = con.cursor() 
    cur.execute("select host, path, isSecure, expiry, name, value from moz_cookies") 

    ftstr = ["FALSE","TRUE"] 

    s = StringIO() 
    s.write("""\ 
# Netscape HTTP Cookie File 
# http://www.netscape.com/newsref/std/cookie_spec.html 
# This is a generated file! Do not edit. 
""") 
    for item in cur.fetchall(): 
     s.write("%s\t%s\t%s\t%s\t%s\t%s\t%s\n" % (
      item[0], ftstr[item[0].startswith('.')], item[1], 
      ftstr[item[2]], item[3], item[4], item[5])) 

    s.seek(0) 

    cookie_jar = cookielib.MozillaCookieJar() 
    cookie_jar._really_load(s, '', True, True) 
    return cookie_jar 

Domanda: Python dispone di un modulo che può facilitare l'estrazione dei cookie dal browser web? Altrimenti, come dovrei adattare il codice sopra per disegnare i cookie da altri browser, come Chromium ecc.?

PS: O sto guardando il problema iniziale (ovvero, autenticarsi con il provider OpenID) nel modo sbagliato? (Mi sento solo la sostituzione di un problema da un altro.)

+1

È possibile visualizzare http://stackoverflow.com/questions/4634408/can-non-web-applications-use-openid – Amber

+0

o http: // stackoverflow. it/questions/921532/retrieving-cookies-python – monkut

+0

@monkut: in realtà è rilevante solo per mantenere i cookie durante le sessioni, che so già come fare. Quello che sto cercando di fare è ottenere i cookie dal browser stesso. – Benjamin

risposta

11

ho creato un modulo per fare esattamente questo, disponibile qui: l'uso https://bitbucket.org/richardpenman/browsercookie/

Esempio:

import requests 
import browsercookie 
cj = browsercookie.chrome() 
r = requests.get('http://stackoverflow.com', cookies=cj) 

python3 forcella:https://github.com/borisbabic/browser_cookie3

+0

Dov'è il tuo modulo? –

+1

Il collegamento è aggiornato. Disponibile anche usando 'pip install browsercookie'. –

+4

Nota per gli altri che si imbattono in questo post ora: il modulo non supporta le attuali versioni di Chrome. –

Problemi correlati