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