2015-08-28 14 views
6

In Fiddler, ich gefangen eine HTTPS-Anforderung mit dem folgende Cookie-String vom Client gesendet (sichtbar in Inspectors> Raw):Konvertieren von Cookie-String in Python dict

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 

Ich möchte dieses Cookie verwenden, in eine Python Requests Anfrage. (Ich habe den Cookie leicht modifiziert, so dass er von Lesern nicht für schändliche Zwecke verwendet werden kann!).

Anfragen scheint jedoch eine dictionary format for sending cookies zu verwenden, und ich habe Probleme beim Konvertieren der obigen Zeichenfolge/Blob in ein Wörterbuch-Format.

Meine Frage ist:

  • Gibt es eine automatisierte Möglichkeit, eine Zeichenfolge (wie das Cookie ich in Fiddler erfasst) in ein Wörterbuch in Python zu konvertieren?

Antwort

17

Sie sollten SimpleCookie der Lage sein zu verwenden, die in der zur Verfügung Standard-Python-Bibliothek:

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 

Wenn Sie Python 2 verwenden, werden Sie von Cookie statt http.cookies importieren.

Docs:

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

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

+0

In dem obigen Cookie, was 'mp_3cb27825a6612988r46d00tinct_id% 22% 3A 3A% 201.752.338% 2C% 22% 24initial_referrer% 22% 3A% 20% 22https% % 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; ', warum folgt es nicht dem Format key = value? – zyxue

+0

Nicht sicher. Ich kopiere einfach, was das OP zur Verfügung gestellt hat. – rcoyner

+0

Wenn Sie Cookie-Modul verwenden, scheint dieser Teil fallengelassen, so dass ich über das Format von Cookie Fragen ... – zyxue

0

keine automatisierte Möglichkeit, aber versuchen Sie dies, was tun sollten, was Sie nach (s Annahme ist die Zeichenfolge von oben):

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