Контекст:
Я работаю над серверным доступом к потребителю OpenID (на самом деле StackExchange). Если я предоставлю пользователю все возможные поставщики OpenID в качестве опции, то мне нужно будет смоделировать взаимодействие с браузером для аутентификации каждого из этих поставщиков, прежде чем я смогу отправить URL-адрес Open ID. Тем не менее, я думаю, что я мог бы сократить это, получив доступ к существующим куки-файлам веб-браузера пользователя и запросив аутентификацию у потребителя напрямую с помощью URL.
Проблема:
Как получить доступ к файлам cookie веб-браузера пользователя? Я видел очень мало информации о том, как сделать это с Python. Этот предыдущий вопрос частично отвечает на проблему, касающуюся Firefox, особенно указывая на пример кода ниже. Однако мне потребуется доступ к файлам cookie из наиболее распространенных веб-браузеров, используемых в Linux, а не только из 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
Вопрос: Предоставляет ли Python модуль, который может облегчить извлечение файлов cookie из веб-браузеров? В противном случае, как мне адаптировать приведенный выше код для извлечения файлов cookie из других браузеров, таких как Chromium и т. Д .?
PS: Или я смотрю на первоначальную проблему (т. Е. Аутентификацию поставщика OpenID) неправильно? (Мне кажется, я просто заменяю проблему другой.)