CookieParser

The CookieParser class provides dedicated functionality for parsing and manipulating HTTP cookies.

Importing

from parser_header import CookieParser

Creating a CookieParser

From Raw String (Multiple Lines)

raw_cookies = """cookie: nonce=Ofymgy29
cookie: sz=1490
cookie: pr=1.25
cookie: uid=2ca13899eb7a
cookie: sid=1:KUo/b68Cp0mhPre4OYgcLF
"""

cookies = CookieParser(raw_cookies)

print(f"Total cookies: {len(cookies)}")
# Output: Total cookies: 5

print(cookies.to_dict())
# Output:
# {
#     'nonce': 'Ofymgy29',
#     'sz': '1490',
#     'pr': '1.25',
#     'uid': '2ca13899eb7a',
#     'sid': '1:KUo/b68Cp0mhPre4OYgcLF'
# }

From Single Line (Semicolon-Separated)

single_line = "cookie: session=abc123; user=john; token=xyz789"

cookies = CookieParser(single_line)

print(cookies.to_dict())
# Output: {'session': 'abc123', 'user': 'john', 'token': 'xyz789'}

From Keyword Arguments

Underscores in key names are converted to hyphens:

cookies = CookieParser(
    session='abc123',
    user_id='12345',
    auth_token='xyz789',
    refresh_token='refresh123'
)

print(cookies.to_dict())
# Output:
# {
#     'session': 'abc123',
#     'user-id': '12345',
#     'auth-token': 'xyz789',
#     'refresh-token': 'refresh123'
# }

print(cookies.to_cookie_header())
# Output: session=abc123; user-id=12345; auth-token=xyz789; refresh-token=refresh123

Mixed: Raw + Kwargs

raw = "cookie: existing=value"

cookies = CookieParser(raw, new_cookie='new_value', another='test')

print(cookies.to_dict())
# Output:
# {
#     'existing': 'value',
#     'new-cookie': 'new_value',
#     'another': 'test'
# }

Factory Methods

# From dictionary
cookies = CookieParser.from_dict({
    'session': 'abc',
    'user': 'john',
    'token': 'xyz'
})
print(cookies.to_cookie_header())
# Output: session=abc; user=john; token=xyz

# From kwargs
cookies = CookieParser.from_kwargs(
    session='test123',
    remember_me='true'
)
print(cookies.to_cookie_header())
# Output: session=test123; remember-me=true

Setting Cookies

Using set() Method

cookies = CookieParser()

# Positional arguments
cookies.set('session', 'abc123')

# Kwargs only
cookies.set(user='john', token='xyz')

# Mixed
cookies.set('admin', 'true', refresh_token='refresh123')

print(cookies.to_dict())
# Output:
# {
#     'session': 'abc123',
#     'user': 'john',
#     'token': 'xyz',
#     'admin': 'true',
#     'refresh-token': 'refresh123'
# }

Using Bracket Notation

cookies = CookieParser()

# Set
cookies['session'] = 'abc123'
cookies['user'] = 'john'

# Get
print(cookies['session'])  # 'abc123'

# Delete
del cookies['user']
print('user' in cookies)  # False

Using update() Method

cookies = CookieParser(existing='value')

# From dict
cookies.update({'new1': 'val1', 'new2': 'val2'})

# From kwargs
cookies.update(new3='val3', new4='val4')

# Mixed
cookies.update({'from_dict': 'yes'}, from_kwargs='also_yes')

print(cookies.keys())
# Output: ['existing', 'new1', 'new2', 'new3', 'new4', 'from-dict', 'from-kwargs']

Method Chaining

All mutating methods return self for chaining:

cookies = (
    CookieParser()
    .set('session', 'abc')
    .set(user='john')
    .set(token='xyz', admin='false')
    .remove('admin')
)

print(cookies.to_cookie_header())
# Output: session=abc; user=john; token=xyz

Removing and Clearing

cookies = CookieParser(a='1', b='2', c='3', d='4')

# Remove specific cookies
cookies.remove('a', 'b')
print(cookies.keys())  # ['c', 'd']

# Clear all
cookies.clear()
print(len(cookies))  # 0

Output Methods

to_dict()

Returns cookies as a dictionary:

cookies = CookieParser(session='abc', user='john')

# Basic usage
d = cookies.to_dict()
print(d)
# Output: {'session': 'abc', 'user': 'john'}

# With additional cookies
d = cookies.to_dict(extra='value')
print(d)
# Output: {'session': 'abc', 'user': 'john', 'extra': 'value'}

Use Case: Requests Library

import requests

cookies = CookieParser(session='abc123', user='john')

response = requests.get(
    'https://httpbin.org/cookies',
    cookies=cookies.to_dict()
)
print(response.json())

Accessing Cookies

Individual Access

cookies = CookieParser(session='abc', user_id='123', auth_token='xyz')

# get() with default
print(cookies.get('session'))           # 'abc'
print(cookies.get('missing', 'N/A'))    # 'N/A'

# Underscore/hyphen interchangeable
print(cookies.get('user-id'))     # '123'
print(cookies.get('user_id'))     # '123' (also works)
print(cookies.get('auth-token'))  # 'xyz'
print(cookies.get('auth_token'))  # 'xyz' (also works)

# Bracket notation
print(cookies['session'])  # 'abc'

Iteration

cookies = CookieParser(session='abc', user='john', token='xyz')

# Iterate
for name in cookies:
    print(f"{name}={cookies[name]}")
# Output:
# session=abc
# user=john
# token=xyz

# Keys, values, items
print(cookies.keys())    # ['session', 'user', 'token']
print(cookies.values())  # ['abc', 'john', 'xyz']
print(cookies.items())   # [('session', 'abc'), ('user', 'john'), ('token', 'xyz')]

Check Existence

cookies = CookieParser(session='abc')

print('session' in cookies)  # True
print('missing' in cookies)  # False
print(len(cookies))          # 1

Parse Method

The parse() method can be called to parse additional data:

cookies = CookieParser()

# Parse raw data
cookies.parse("cookie: a=1; b=2")
print(cookies.to_dict())  # {'a': '1', 'b': '2'}

# Parse with additional kwargs
cookies.parse("cookie: c=3", d='4', e='5')
print(cookies.to_dict())  # {'a': '1', 'b': '2', 'c': '3', 'd': '4', 'e': '5'}

# Parse only kwargs (None for data)
cookies.parse(None, f='6')
print(cookies.to_dict())  # {'a': '1', 'b': '2', 'c': '3', 'd': '4', 'e': '5', 'f': '6'}

Complete Example

from parser_header import CookieParser

# Create with initial cookies
cookies = CookieParser(
    session='initial_session',
    user='john'
)

# Add more cookies
cookies.set(token='xyz123')
cookies.set(remember_me='true', theme='dark')

# Update from dict
cookies.update({'lang': 'en', 'timezone': 'UTC'})

# Remove unwanted
cookies.remove('theme')

# Get results
print("As Header:")
print(cookies.to_cookie_header())
# Output: session=initial_session; user=john; token=xyz123; remember-me=true; lang=en; timezone=UTC

print("\nAs Dict:")
print(cookies.to_dict())
# Output:
# {
#     'session': 'initial_session',
#     'user': 'john',
#     'token': 'xyz123',
#     'remember-me': 'true',
#     'lang': 'en',
#     'timezone': 'UTC'
# }

print(f"\nTotal: {len(cookies)} cookies")
# Output: Total: 6 cookies