In Fiddler, I captured an HTTPS request with the following cookie string sent from the client (visible in Inspectors > Raw):
Cookie: devicePixelRatio=1; ident=exists; __utma=13103r6942.2918; __utmc=13103656942; __utmz=13105942.1.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); mp_3cb27825a6612988r46d00tinct_id%22%3A%201752338%2C%22%24initial_referrer%22%3A%20%22https%3A%2F%2Fwww.pion_created_at%22%3A%20%222015-08-03%22%2C%22platform%22%3A%20%22web%22%2C%%22%3A%20%%22%7D; t_session=BAh7DUkiD3Nlc3NpbWVfZV9uYW1lBjsARkkiH1BhY2lmaWMgVGltZSAoVVMgJiBDYW5hZGEpBjsAVEkiFXNpZ25pbl9wZXJzb25faWQGOwBGaQMSvRpJIhRsYXN0X2xvZ2luX2RhdGUGOwBGVTogQWN0aXZlU3VwcG9ydDo6VGltZVdpdGhab25lWwhJdToJVGltZQ2T3RzAAABA7QY6CXpvbmVJIghVVEMGOwBUSSIfUGFjaWZpZWRfZGFzaGJvYXJkX21lc3NhZ2UGOwBGVA%3D%3D--6ce6ef4bd6bc1a469164b6740e7571c754b31cca
I'd like to use this cookie in a Python Requests request. (I modified the cookie slightly, so that it can't be used by readers for nefarious purposes!).
However, Requests appears to use a dictionary format for sending cookies, and I'm having trouble converting the above string/blob into a dictionary format.
My question is:
Method #1 : Using json.loads() This task can easily be performed using the inbuilt function of loads of json library of python which converts the string of valid dictionary into json form, dictionary in Python.
get_encryption_key() extracts and decodes the AES key that was used to encrypt the cookies, which is stored in "%USERPROFILE%\AppData\Local\Google\Chrome\User Data\Local State" file in JSON format. The above function accepts the data and the AES key as parameters and uses the key to decrypt the data to return it.
To convert a list to a dictionary using the same values, you can use the dict. fromkeys() method. To convert two lists into one dictionary, you can use the Python zip() function. The dictionary comprehension lets you create a new dictionary based on the values of a list.
You should be able to use SimpleCookie
which is available in the standard Python library:
from http.cookies import SimpleCookie
rawdata = 'devicePixelRatio=1; ident=exists; __utma=13103r6942.2918; __utmc=13103656942; __utmz=13105942.1.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); mp_3cb27825a6612988r46d00tinct_id%22%3A%201752338%2C%22%24initial_referrer%22%3A%20%22https%3A%2F%2Fwww.pion_created_at%22%3A%20%222015-08-03%22%2C%22platform%22%3A%20%22web%22%2C%%22%3A%20%%22%7D; t_session=BAh7DUkiD3Nlc3NpbWVfZV9uYW1lBjsARkkiH1BhY2lmaWMgVGltZSAoVVMgJiBDYW5hZGEpBjsAVEkiFXNpZ25pbl9wZXJzb25faWQGOwBGaQMSvRpJIhRsYXN0X2xvZ2luX2RhdGUGOwBGVTogQWN0aXZlU3VwcG9ydDo6VGltZVdpdGhab25lWwhJdToJVGltZQ2T3RzAAABA7QY6CXpvbmVJIghVVEMGOwBUSSIfUGFjaWZpZWRfZGFzaGJvYXJkX21lc3NhZ2UGOwBGVA%3D%3D--6ce6ef4bd6bc1a469164b6740e7571c754b31cca'
cookie = SimpleCookie()
cookie.load(rawdata)
# Even though SimpleCookie is dictionary-like, it internally uses a Morsel object
# which is incompatible with requests. Manually construct a dictionary instead.
cookies = {k: v.value for k, v in cookie.items()}
If you are using Python 2, you will have to import from Cookie
instead of http.cookies
.
Docs:
https://docs.python.org/2/library/cookie.html
https://docs.python.org/3/library/http.cookies.html
Try this function, definitly it will help :). This function supports more cookie attributes like comment, priority, version and Max-Age
def Robotcookie(cookie: str, parent_domain: str):
items = cookie.split(';')
SameSite = HttpOnly = Secure = Domain = Path = Expires = Comment = MaxAge = CookieName = CookieValue = Size = Sessionkey = Version = Priority = None
CookieName = CookieValue = None
idx = len(items) - 1
while idx >= 0:
item = items[idx].strip()
idx -= 1
if not item:
continue
SameSiteMatched = re.match(r'^SameSite(.*)?', item, re.I)
HttpOnlyMatched = SameSiteMatched or re.match(r'^HttpOnly(.*)$', item, re.I)
SecureMatched = HttpOnlyMatched or re.match(r'^Secure(.*)$', item, re.I)
DomainMatched = SecureMatched or re.match(r'^Domain(.*)?', item, re.I)
PathMatched = DomainMatched or re.match(r'^Path(.*)?', item, re.I)
ExpiresMatched = PathMatched or re.match(r'^Expires(.*)?', item, re.I)
CommentMatched = ExpiresMatched or re.match(r'^Comment(.*)?', item, re.I)
MaxAgeMatched = ExpiresMatched or re.match(r'^Max-Age=(.*)?', item, re.I)
VersionMatched = MaxAgeMatched or re.match(r'^Version=(.*)?', item, re.I)
PriorityMatched = VersionMatched or re.match(r'^priority=(.*)?', item, re.I)
matched = SameSiteMatched or HttpOnlyMatched or SecureMatched or DomainMatched or PathMatched or ExpiresMatched or CommentMatched or MaxAgeMatched or VersionMatched or PriorityMatched
if matched:
val = matched.groups(0)[0].lstrip('=')
if matched == SameSiteMatched:
SameSite = val if val.lower() in ['strict', 'lax', 'none'] else None
elif matched == HttpOnlyMatched:
HttpOnly = True
elif matched == SecureMatched:
Secure = True
elif matched == DomainMatched:
Domain = val
elif matched == PathMatched:
Path = val
elif matched == PathMatched:
Path = val
elif matched == ExpiresMatched:
Expires = val
elif matched == CommentMatched:
Comment = val
elif matched == MaxAgeMatched:
MaxAge = val
elif matched == VersionMatched:
Version = val
elif matched == PriorityMatched:
Priority = val
else:
CookieMatched = re.match(r'^(.[^=]*)=(.*)?', item, re.I)
if CookieMatched:
CookieName, CookieValue = CookieMatched.groups(0)
Sessionkey = True if not Expires else False
Size = (len(CookieName) if CookieName else 0) + (len(CookieValue) if CookieValue else 0)
Domain = parent_domain if CookieName and not Domain else Domain
Path = '/' if CookieName and not Path else Path
Priority = 'Medium' if CookieName and not Priority else Priority.title() if Priority else 'Medium'
Cookie = {
CookieName: CookieValue,
'Domain': Domain,
'Path': Path,
'Expires': Expires,
'Comment': Comment,
'MaxAge': MaxAge,
'SameSite': SameSite,
'HttpOnly': HttpOnly,
'Secure': Secure,
'Size': Size,
'Sessionkey': Sessionkey,
'Version': Version,
'Priority': Priority
}
return Cookie if CookieName else None
cookie = 'name=bijaya; comment=Comment1; expires=Mon, 26-Jul-2021 06:34:02 GMT; path=/; domain=.google.com; Secure; HttpOnly; SameSite=none; Max-Age=244114; Version=1.2; priority=high;'
CookieDict = Robotcookie(cookie, parent_domain='google.com')
{'name': 'bijaya', 'Domain': '.google.com', 'Path': '/', 'Expires': None, 'Comment': 'Comment1', 'MaxAge': '244114', 'SameSite': 'none', 'HttpOnly': True, 'Secure': True, 'Size': 179, 'Sessionkey': True, 'Version': '1.2', 'Priority': 'High'}
For a plain cookie string (document.cookies
)
cookies = (dict(i.split('=', 1) for i in rawdata.split('; ')))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With