2012-01-11 33 views
7

Bối cảnh:
Tôi đang làm việc trên truy cập phụ trợ cho người tiêu dùng OpenID (StackExchange trên thực tế). Nếu tôi cung cấp tất cả các nhà cung cấp OpenID có thể làm tùy chọn cho người dùng, thì tôi phải mô phỏng tương tác trình duyệt để xác thực cho từng nhà cung cấp này trước khi tôi có thể gửi URL ID mở. Tuy nhiên, tôi nghĩ rằng tôi có thể cắt ngắn điều này bằng cách truy cập các cookie hiện có của trình duyệt web của người dùng và yêu cầu xác thực trực tiếp cho người tiêu dùng bằng URL.Làm cách nào để tải cookie từ trình duyệt web bằng Python?

Vấn đề:
Làm thế nào để truy cập các tập tin cookie của trình duyệt web của người dùng? Tôi đã nhìn thấy rất ít thông tin về cách làm điều đó với Python. Điều này previous question một phần câu trả lời vấn đề liên quan đến Firefox, chỉ đặc biệt là the code sample của cô dưới đây. Tuy nhiên, tôi sẽ cần phải truy cập cookie từ các trình duyệt web phổ biến nhất được sử dụng trên Linux, không chỉ 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 

Câu hỏi: Python có cung cấp mô-đun có thể hỗ trợ khai thác cookie từ trình duyệt web không? Nếu không, tôi nên điều chỉnh mã trên như thế nào để vẽ cookie từ các trình duyệt khác, như Chromium, v.v ...?

PS: Hoặc tôi có đang xem xét vấn đề ban đầu (tức là xác thực nhà cung cấp OpenID) không đúng cách? (Tôi cảm thấy tôi chỉ thay thế một vấn đề bằng cách khác.)

+1

Bạn có thể muốn xem http://stackoverflow.com/questions/4634408/can-non-web-applications-use-openid – Amber

+0

hoặc http: // stackoverflow. com/questions/921532/retrieving-cookies-python – monkut

+0

@monkut: thực tế là chỉ có liên quan để giữ cookie trong suốt các phiên mà tôi đã biết cách thực hiện. Những gì tôi đang cố gắng làm là lấy cookie từ chính trình duyệt. – Benjamin

Trả lời

11

Tôi tạo ra một mô-đun để làm chính xác điều đó, có sẵn ở đây: sử dụng https://bitbucket.org/richardpenman/browsercookie/

Ví dụ:

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

python3 ngã ba:https://github.com/borisbabic/browser_cookie3

+0

Mô-đun của bạn ở đâu? –

+1

Liên kết được cập nhật. Cũng có sẵn bằng cách sử dụng 'pip install browsercookie'. –

+4

Lưu ý cho những người khác xem qua bài đăng này ngay bây giờ: Mô-đun không hỗ trợ các phiên bản Chrome hiện tại. –

Các vấn đề liên quan