2015-08-28 31 views
6

W Skrzypek, I przechwycone żądania HTTPS z następującym ciągiem ciasteczka wysłane z klienta (widoczny w Inspektorów> RAW):Konwersja plików cookie na ciąg 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 

Chciałbym wykorzystać ten plik w żądanie żądania Pythona. (Ja nieznacznie zmodyfikowałem ciasteczko, aby nie mogło być używane przez czytelników do nikczemnych celów!).

Jednak wydaje się, że Żądania mają wartość dictionary format for sending cookies, a problem z konwersją powyższego ciągu/obiektu blobowego na format słownika jest kłopotliwy.

Moje pytanie brzmi:

  • Czy istnieje sposób zautomatyzowany przekonwertować ciąg (jak ciasteczka i zrobione w Skrzypek) do słownika w Pythonie?

Odpowiedz

17

Powinieneś być w stanie wykorzystać SimpleCookie który jest dostępny w standardowa biblioteka Pythona:

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 

Jeśli używasz Python 2, trzeba będzie importować z Cookie zamiast http.cookies.

Docs:

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

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

+0

W powyższym pliku cookie, co jest '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% 22platforma% 22% 3A% 20% 22web% 22% 2C %% 22% 3A% 20 %% 22% 7D; ', dlaczego nie stosuje się formatu key = value? – zyxue

+0

Nie jestem pewien. Po prostu skopiowałem - wkleiłem to, co zapewniło PO. – rcoyner

+0

Kiedy korzystasz z modułu Cookie, ta część wydaje się być pomijana, co powoduje, że zastanawiam się nad formatem pliku cookie ... – zyxue

0

Nie zautomatyzowany sposób, ale spróbuj tego, co powinni robić to, czego po (zakładając s jest łańcuch od góry):

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