파이썬(Python)에서 쿠키 검색하기
설정된 모든 쿠키를 가져오는 작업은 매우 간단합니다. CGI 프로그램에서 쿠키는 환경 변수 HTTP_COOKIE에 저장되며, 여러 개의 쿠키는 세미콜론(;)으로 구분되어 다음과 같은 형식으로 전달됩니다.
key1=value1;key2=value2;key3=value3...
예제: 쿠키 값 읽어오기
다음은 HTTP_COOKIE 환경 변수에서 쿠키를 파싱하여 원하는 값을 추출하는 예제 코드입니다.
#!/usr/bin/python3
from os import environ
if 'HTTP_COOKIE' in environ:
# 세미콜론(;)으로 쿠키를 분리한 뒤 각 항목을 처리
for cookie in environ['HTTP_COOKIE'].split(';'):
key, value = cookie.strip().split('=', 1)
if key == "UserID":
user_id = value
if key == "Password":
password = value
print("User ID = %s" % user_id)
print("Password = %s" % password)
위 코드의 동작 순서는 다음과 같습니다.
1. 쿠키 문자열을 세미콜론(;) 기준으로 분리합니다.
2. 각 항목을 등호(=)로 나누어 키(key)와 값(value)을 얻습니다.
3. 키 이름이 UserID 또는 Password인 경우 해당 값을 변수에 저장합니다.
참고로 과거 파이썬 2 기반 자료에서는 environ.has_key('HTTP_COOKIE')와 같은 문법이 사용되었지만, 이 방식은 파이썬 3에서 제거되었습니다. 따라서 위 예제처럼 in 연산자로 환경 변수의 존재 여부를 확인하는 것이 좋습니다.
실행 결과
앞서 설정한 쿠키(UserID=XYZ, Password=XYZ123)가 있는 상태에서 위 스크립트를 실행하면 다음과 같은 결과가 출력됩니다.
User ID = XYZ Password = XYZ123
더 나은 방법: http.cookies 모듈 활용
파이썬 표준 라이브러리의 http.cookies 모듈을 사용하면 쿠키를 더 안전하고 편리하게 처리할 수 있습니다.
from http.cookies import SimpleCookie
from os import environ
cookie = SimpleCookie()
cookie.load(environ.get('HTTP_COOKIE', ''))
user_id = cookie['UserID'].value
password = cookie['Password'].value
print("User ID =", user_id)
print("Password =", password)
SimpleCookie는 쿠키 문자열의 인코딩과 특수문자 처리를 자동으로 관리해 주므로, 실무에서는 문자열을 직접 분리하는 방식보다 이 모듈을 사용하는 것이 권장됩니다.