mirror of
https://github.com/Grasscutters/mitmproxy.git
synced 2025-02-01 15:55:28 +00:00
New get_cookie and set_cookie implementations for HTTPRequest
This commit is contained in:
parent
4652887786
commit
e17eacd8d7
@ -6,7 +6,7 @@ import time
|
|||||||
import copy
|
import copy
|
||||||
from email.utils import parsedate_tz, formatdate, mktime_tz
|
from email.utils import parsedate_tz, formatdate, mktime_tz
|
||||||
import threading
|
import threading
|
||||||
from netlib import http, tcp, http_status
|
from netlib import http, tcp, http_status, http_cookies
|
||||||
import netlib.utils
|
import netlib.utils
|
||||||
from netlib import odict
|
from netlib import odict
|
||||||
from .tcp import TCPHandler
|
from .tcp import TCPHandler
|
||||||
@ -670,15 +670,22 @@ class HTTPRequest(HTTPMessage):
|
|||||||
self.scheme, self.host, self.port, self.path = parts
|
self.scheme, self.host, self.port, self.path = parts
|
||||||
|
|
||||||
def get_cookies(self):
|
def get_cookies(self):
|
||||||
cookie_headers = self.headers.get("cookie")
|
"""
|
||||||
if not cookie_headers:
|
|
||||||
return None
|
|
||||||
|
|
||||||
cookies = []
|
Returns a possibly empty netlib.odict.ODict object.
|
||||||
for header in cookie_headers:
|
"""
|
||||||
pairs = [pair.partition("=") for pair in header.split(';')]
|
ret = odict.ODict()
|
||||||
cookies.extend((pair[0], (pair[2], {})) for pair in pairs)
|
for i in self.headers["cookie"]:
|
||||||
return dict(cookies)
|
ret.extend(http_cookies.parse_cookie_header(i))
|
||||||
|
return ret
|
||||||
|
|
||||||
|
def set_cookies(self, odict):
|
||||||
|
"""
|
||||||
|
Takes an netlib.odict.ODict object. Over-writes any existing Cookie
|
||||||
|
headers.
|
||||||
|
"""
|
||||||
|
v = http_cookies.format_cookie_header(odict)
|
||||||
|
self.headers["Cookie"] = [v]
|
||||||
|
|
||||||
def replace(self, pattern, repl, *args, **kwargs):
|
def replace(self, pattern, repl, *args, **kwargs):
|
||||||
"""
|
"""
|
||||||
|
@ -161,7 +161,7 @@ class TestHTTPRequest:
|
|||||||
h = odict.ODictCaseless()
|
h = odict.ODictCaseless()
|
||||||
r = tutils.treq()
|
r = tutils.treq()
|
||||||
r.headers = h
|
r.headers = h
|
||||||
assert r.get_cookies() is None
|
assert len(r.get_cookies()) == 0
|
||||||
|
|
||||||
def test_get_cookies_single(self):
|
def test_get_cookies_single(self):
|
||||||
h = odict.ODictCaseless()
|
h = odict.ODictCaseless()
|
||||||
@ -170,7 +170,7 @@ class TestHTTPRequest:
|
|||||||
r.headers = h
|
r.headers = h
|
||||||
result = r.get_cookies()
|
result = r.get_cookies()
|
||||||
assert len(result)==1
|
assert len(result)==1
|
||||||
assert result['cookiename']==('cookievalue',{})
|
assert result['cookiename']==['cookievalue']
|
||||||
|
|
||||||
def test_get_cookies_double(self):
|
def test_get_cookies_double(self):
|
||||||
h = odict.ODictCaseless()
|
h = odict.ODictCaseless()
|
||||||
@ -179,8 +179,8 @@ class TestHTTPRequest:
|
|||||||
r.headers = h
|
r.headers = h
|
||||||
result = r.get_cookies()
|
result = r.get_cookies()
|
||||||
assert len(result)==2
|
assert len(result)==2
|
||||||
assert result['cookiename']==('cookievalue',{})
|
assert result['cookiename']==['cookievalue']
|
||||||
assert result['othercookiename']==('othercookievalue',{})
|
assert result['othercookiename']==['othercookievalue']
|
||||||
|
|
||||||
def test_get_cookies_withequalsign(self):
|
def test_get_cookies_withequalsign(self):
|
||||||
h = odict.ODictCaseless()
|
h = odict.ODictCaseless()
|
||||||
@ -189,10 +189,18 @@ class TestHTTPRequest:
|
|||||||
r.headers = h
|
r.headers = h
|
||||||
result = r.get_cookies()
|
result = r.get_cookies()
|
||||||
assert len(result)==2
|
assert len(result)==2
|
||||||
assert result['cookiename']==('coo=kievalue',{})
|
assert result['cookiename']==['coo=kievalue']
|
||||||
assert result['othercookiename']==('othercookievalue',{})
|
assert result['othercookiename']==['othercookievalue']
|
||||||
|
|
||||||
|
|
||||||
|
def test_set_cookies(self):
|
||||||
|
h = odict.ODictCaseless()
|
||||||
|
h["Cookie"] = ["cookiename=cookievalue"]
|
||||||
|
r = tutils.treq()
|
||||||
|
r.headers = h
|
||||||
|
result = r.get_cookies()
|
||||||
|
result["cookiename"] = ["foo"]
|
||||||
|
r.set_cookies(result)
|
||||||
|
assert r.get_cookies()["cookiename"] == ["foo"]
|
||||||
|
|
||||||
|
|
||||||
class TestHTTPResponse:
|
class TestHTTPResponse:
|
||||||
|
Loading…
Reference in New Issue
Block a user