mirror of
https://github.com/Grasscutters/mitmproxy.git
synced 2024-11-27 18:31:22 +00:00
6dda2b2ee5
A pattern we need to use far more often in the codebase
66 lines
1.7 KiB
Python
66 lines
1.7 KiB
Python
from netlib import tutils
|
|
from netlib.http import url
|
|
|
|
def test_parse():
|
|
with tutils.raises(ValueError):
|
|
url.parse("")
|
|
|
|
s, h, po, pa = url.parse(b"http://foo.com:8888/test")
|
|
assert s == b"http"
|
|
assert h == b"foo.com"
|
|
assert po == 8888
|
|
assert pa == b"/test"
|
|
|
|
s, h, po, pa = url.parse("http://foo/bar")
|
|
assert s == b"http"
|
|
assert h == b"foo"
|
|
assert po == 80
|
|
assert pa == b"/bar"
|
|
|
|
s, h, po, pa = url.parse(b"http://user:pass@foo/bar")
|
|
assert s == b"http"
|
|
assert h == b"foo"
|
|
assert po == 80
|
|
assert pa == b"/bar"
|
|
|
|
s, h, po, pa = url.parse(b"http://foo")
|
|
assert pa == b"/"
|
|
|
|
s, h, po, pa = url.parse(b"https://foo")
|
|
assert po == 443
|
|
|
|
with tutils.raises(ValueError):
|
|
url.parse(b"https://foo:bar")
|
|
|
|
# Invalid IDNA
|
|
with tutils.raises(ValueError):
|
|
url.parse("http://\xfafoo")
|
|
# Invalid PATH
|
|
with tutils.raises(ValueError):
|
|
url.parse("http:/\xc6/localhost:56121")
|
|
# Null byte in host
|
|
with tutils.raises(ValueError):
|
|
url.parse("http://foo\0")
|
|
# Port out of range
|
|
_, _, port, _ = url.parse("http://foo:999999")
|
|
assert port == 80
|
|
# Invalid IPv6 URL - see http://www.ietf.org/rfc/rfc2732.txt
|
|
with tutils.raises(ValueError):
|
|
url.parse('http://lo[calhost')
|
|
|
|
|
|
def test_unparse():
|
|
assert url.unparse("http", "foo.com", 99, "") == "http://foo.com:99"
|
|
assert url.unparse("http", "foo.com", 80, "/bar") == "http://foo.com/bar"
|
|
assert url.unparse("https", "foo.com", 80, "") == "https://foo.com:80"
|
|
assert url.unparse("https", "foo.com", 443, "") == "https://foo.com"
|
|
|
|
|
|
def test_urlencode():
|
|
assert url.encode([('foo', 'bar')])
|
|
|
|
|
|
def test_urldecode():
|
|
s = "one=two&three=four"
|
|
assert len(url.decode(s)) == 2
|