2012-04-12 4 views
7

두 부분으로 구성된 작은 애플리케이션을 만듭니다. 그 중 하나는 Chrome 브라우저에 표시되고 다른 하나는 Python으로 프로그래밍 된 로컬 애플리케이션입니다.우분투 크롬 : 파이썬 스크립트에서 쿠키를 읽는 방법

Chrome에서 사용자는 자신이 선호하는 언어를 선택할 <select>입니다. 이 정보는 Chrome에 쿠키에 저장됩니다.

해당 언어 환경 설정 (즉, 쿠키 읽기)을 검색 할 수 있는지 알고 싶습니다. 로컬 응용 프로그램을 실행할 때 사용자가 이미 Chrome에서 선택한 것과 동일한 언어로 표시됩니다.

시스템의 로케일을 변경할 수는 없지만 (이는 아마도 가장 이해할 수 있습니다). 영어로 남아 있어야하지만, 사용자가 중국어을 Chrome을 통해 기본 언어로 선택한 다음 로컬 애플리케이션을 실행하는 경우 해당 애플리케이션을 에서 시작할 수 있기를 바랍니다.

Chrome 용으로 command line switches을보고 있었지만 너무 도움이되지 않았습니다. 기껏해야 --enable-file-cookies 옵션을 사용하고 쿠키 파일을 열고 구문 분석 해보십시오. 어떻게 든 찾을 수 있었던 모든 정보는 매우 모호합니다.

미리 감사드립니다.

업데이트. 추가 검색 (1, 2)은 Chrome이 SQL Lite를 사용하여 쿠키를 저장하고있는 것으로 보입니다. 나는 이것을 조사하고있다. 어쩌면 거기에 희망이 있습니다 ...

+0

은 모두 파이썬 클라이언트이고 웹 사이트는 서버와 대화하고 있습니까? 그렇다면 브라우저에서 보낸 언어 기본 설정을 저장하고 Python 클라이언트에서 정보를 검색 할 수 있습니다. – Hoff

+0

@Hoff -> 나는 그것에 대해서도 생각했습니다. 파이썬 클라이언트가 서버와 정확히 통신하지는 않지만 서버가 localhost에서 실행되고 있으므로 (실용적인) 답변은 "예"입니다. 서버에 언어 기본 설정을 저장할 수 있습니다. 마지막 리소스로 유지하겠습니다 ... 또한 Chrome의 쿠키 관리에 대해 궁금합니다. 이미 Chrome에서 선호하는 언어가 쿠키에 저장된 하드 드라이브에 저장되어있는 경우, 서버를 사용하여 다시 저장하는 것을 피할 수 있습니다. 아이디어 주셔서 감사합니다 * :) * – BorrajaX

+0

sqlite3 ~/.config/google-chrome/Default/Cookies 명령은 유망한 것으로 보입니다 ... 계속 게시됩니다 :) – BorrajaX

답변

8

그래, 내 질문에 언급에서 언급했듯이, sqlite3는 유망한 듯 ... 나는 배우는 날, 나는 세상을 정복 할 것이다 !! 어쨌든

, 단지 경우 다른 사람에게 도움이된다 :이 작은 조각은 쿠키 "데이터베이스"(실제로는 그냥 ... 어쨌든, 파일 있지만)에 연결됩니다

#!/usr/bin/env python 
import os 
import sqlite3 
import pwd 

_cookieName = "preferredLanguage" 

def getPreferredLanguageFromCookieDB(): 
    retval="en-US" 
    cookieDBFilename = os.path.join(pwd.getpwuid(1000).pw_dir, ".config/google-chrome/Default/Cookies") 
    if os.path.isfile(cookieDBFilename): 
     connection = sqlite3.connect(cookieDBFilename) 
     querier = connection.cursor() 
     numCookiesMatching = int(querier.execute('SELECT COUNT(*) FROM cookies WHERE (host_key="127.0.0.1" or host_key="localhost") and name="%s"' % (_cookieName)).fetchone()[0]) 
     if numCookiesMatching == 1: 
      retval = querier.execute('SELECT value FROM cookies WHERE (`cookies`.`host_key`="127.0.0.1" or `cookies`.`host_key`="localhost") and `cookies`.`name` = "%s"' % (_cookieName)).fetchone()[0] 
     elif numCookiesMatching == 0: 
      print("::getPreferredLanguageFromCookieDB > No cookie for '%s' found. Assuming wizard hasn't run yet, which is weird, but not critical" % (_cookieName)) 
      retval="en-US" 
     else: 
      raise KeyError("Found %s cookies matching %s in file %s. This shouldn't have happened" % (numCookiesMatching, _cookieName, cookieDBFilename)) 
      retval=None 
    else: 
     print("::getPreferredLanguageFromCookieDB > Cookie 'db' (actually, file) %s doesn't exist" % (cookieDBFilename)) 
     retval="en-US" 

    return retval 


if __name__ == "__main__": 
    print "Prefered language: %s" % getPreferredLanguageFromCookieDB() 

과의 값을 읽어 localhost 또는 127.0.0.1에 의해 발행 된 "preferredLanguage"쿠키 localhost가 발급 한 "preferredLanguage"쿠키가 두 개 이상있는 경우 충돌이 발생합니다.

관련 문제