2015-08-28 176 views
6

在提琴手,我捕获与来自客户端发送的以下cookie字符串(在检查员可见>原)的HTTPS请求:转换cookie字符串成Python字典

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 

我想在使用这个cookie一个Python请求请求。 (我稍微修改了这个cookie,这样它就不会被读者用于恶意目的!)。

但是,请求似乎使用dictionary format for sending cookies,我无法将上述字符串/ blob转换为字典格式。

我的问题是:

  • 是否有一个字符串转换自动化的方式(就像我在小提琴手捕获的cookie中)到在Python字典?

回答

17

你应该能够使用SimpleCookie它可在标准Python库:

from http.cookies import SimpleCookie 

rawdata = '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' 
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 = {} 
for key, morsel in cookie.items(): 
    cookies[key] = morsel.value 

如果您正在使用Python 2,你将不得不从Cookie,而不是http.cookies进口。

文档:

https://docs.python.org/2/library/cookie.html

https://docs.python.org/3/library/http.cookies.html

+0

在上述的cookie,什么是'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; ',为什么它不遵循key = value格式? – zyxue

+0

不确定。我只是复制了OP提供的内容。 – rcoyner

+0

当你使用Cookie模块时,该部分似乎被丢弃,使我想知道cookie的格式... – zyxue

0

没有自动化的方式,但试试这个,它应该做的你是什么后(假设s是从上面的字符串):

>>> import re 
>>> q = {k.strip():v for k,v in re.findall(r'(.*?)=(.*?);', s.split(':')[1])} 
>>> q['__utma'] 
'13103r6942.2918'