Testing badtests.py at
http://127.0.0.1:60666
Endpoints: 65
Libraries: urllib.request, http.client, requests, aiohttp
--------------------------------------------
ENDPOINT: /cl-word
TITLE: Content-Length: banana
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Length': 'banana'}
Body: b'hello'
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 03:59:55 GMT'), ('Content-Length', 'banana')]
Body: b'hello'
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Length': 'banana'}
Body: b'hello'
[aiohttp]
ERROR: ClientResponseError: 400, message="Invalid character in Content-Length:\n\n b'Content-Length: banana'\n ^", url='
http://127.0.0.1:60666/cl-word'
--------------------------------------------
ENDPOINT: /cl-empty
TITLE: Content-Length: (empty)
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Length': ''}
Body: b'hello'
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 03:59:55 GMT'), ('Content-Length', '')]
Body: b'hello'
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Length': ''}
Body: b'hello'
[aiohttp]
ERROR: ClientResponseError: 400, message="Empty Content-Length:\n\n b''\n ^", url='
http://127.0.0.1:60666/cl-empty'
--------------------------------------------
ENDPOINT: /cl-negative
TITLE: Content-Length: -99999999999999999
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Length': '-99999999999999999'}
Body: b'hello'
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 03:59:55 GMT'), ('Content-Length', '-99999999999999999')]
Body: b'hello'
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Length': '-99999999999999999'}
Body: b'hello'
[aiohttp]
ERROR: ClientResponseError: 400, message="Invalid character in Content-Length:\n\n b'Content-Length: -99999999999999999'\n ^", url='
http://127.0.0.1:60666/cl-negative'
--------------------------------------------
ENDPOINT: /cl-huge
TITLE: Content-Length: 99999999999999999
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Length': '99999999999999999'}
Body: b'tiny'
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 03:59:55 GMT'), ('Content-Length', '99999999999999999')]
Body: b'tiny'
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Length': '99999999999999999'}
Body: b'tiny'
[aiohttp]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Length': '99999999999999999'}
Body: b'tiny'
--------------------------------------------
ENDPOINT: /cl-zero
TITLE: Content-Length: 0 (body sent)
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Length': '0'}
Body: b''
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 03:59:55 GMT'), ('Content-Length', '0')]
Body: b''
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Length': '0'}
Body: b''
[aiohttp]
ERROR: ClientResponseError: 400, message="Data after `Connection: close`:\n\n b'surprise!'\n ^", url='
http://127.0.0.1:60666/cl-zero'
--------------------------------------------
ENDPOINT: /cl-float
TITLE: Content-Length: 3.14159
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Length': '3.14159'}
Body: b'hello'
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 03:59:55 GMT'), ('Content-Length', '3.14159')]
Body: b'hello'
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Length': '3.14159'}
Body: b'hello'
[aiohttp]
ERROR: ClientResponseError: 400, message="Invalid character in Content-Length:\n\n b'Content-Length: 3.14159'\n ^", url='
http://127.0.0.1:60666/cl-float'
--------------------------------------------
ENDPOINT: /cl-hex
TITLE: Content-Length: 0xDEAD
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Length': '0xDEAD'}
Body: b'hello'
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 03:59:55 GMT'), ('Content-Length', '0xDEAD')]
Body: b'hello'
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Length': '0xDEAD'}
Body: b'hello'
[aiohttp]
ERROR: ClientResponseError: 400, message="Invalid character in Content-Length:\n\n b'Content-Length: 0xDEAD'\n ^", url='
http://127.0.0.1:60666/cl-hex'
--------------------------------------------
ENDPOINT: /cl-null
TITLE: Content-Length: 5\x00
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Length': '5\x00'}
Body: b'hello'
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 03:59:55 GMT'), ('Content-Length', '5\x00')]
Body: b'hello'
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Length': '5\x00'}
Body: b'hello'
[aiohttp]
ERROR: ClientResponseError: 400, message="Invalid character in Content-Length:\n\n b'Content-Length: 5'\n ^", url='
http://127.0.0.1:60666/cl-null'
--------------------------------------------
ENDPOINT: /cl-negative-one
TITLE: Content-Length: -1
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Length': '-1'}
Body: b'hello'
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 03:59:55 GMT'), ('Content-Length', '-1')]
Body: b'hello'
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Length': '-1'}
Body: b'hello'
[aiohttp]
ERROR: ClientResponseError: 400, message="Invalid character in Content-Length:\n\n b'Content-Length: -1'\n ^", url='
http://127.0.0.1:60666/cl-negative-one'
--------------------------------------------
ENDPOINT: /cl-nan
TITLE: Content-Length: NaN
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Length': 'NaN'}
Body: b'hello'
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 03:59:55 GMT'), ('Content-Length', 'NaN')]
Body: b'hello'
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Length': 'NaN'}
Body: b'hello'
[aiohttp]
ERROR: ClientResponseError: 400, message="Invalid character in Content-Length:\n\n b'Content-Length: NaN'\n ^", url='
http://127.0.0.1:60666/cl-nan'
--------------------------------------------
ENDPOINT: /cl-inf
TITLE: Content-Length: Infinity
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Length': 'Infinity'}
Body: b'hello'
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 03:59:55 GMT'), ('Content-Length', 'Infinity')]
Body: b'hello'
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Length': 'Infinity'}
Body: b'hello'
[aiohttp]
ERROR: ClientResponseError: 400, message="Invalid character in Content-Length:\n\n b'Content-Length: Infinity'\n ^", url='
http://127.0.0.1:60666/cl-inf'
--------------------------------------------
ENDPOINT: /cl-mismatch
TITLE: Content-Length: 1 (body 30 bytes)
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Length': '1'}
Body: b't'
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 03:59:55 GMT'), ('Content-Length', '1')]
Body: b't'
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Length': '1'}
Body: b't'
[aiohttp]
ERROR: ClientResponseError: 400, message="Data after `Connection: close`:\n\n b'this is way more than one byte'\n ^", url='
http://127.0.0.1:60666/cl-mismatch'
--------------------------------------------
ENDPOINT: /ct-garbage
TITLE: Content-Type: 200 random chars
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Type': '?Xkar]/`A\tB40oLA%P:?'}
Body: b'hello'
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 03:59:55 GMT'), ('Content-Type', 'Rr>IQL OXeaw?Sr>F$&&hF2My5S/a?')]
Body: b'hello'
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Type': 'pBT\t"N7/yCP7w\\[zT_QEJ2,NFAIPRBy7XNVCOGfk RW/MEanr$B4KDJ da;.kor2dS;;OSTqVWkM>D%;S$Xq\\x0cWsNcV0\\\'EhTN6FF:Vg>HDKa,bXy8AT\\\'R+eH2`-HaZU?Swk[!7NwT4tnw7/#\\r5s,Rb;,-1quzo5e8(>1E-:IP4Y2o=b^IqJKX\'\n ^', url='
http://127.0.0.1:60666/ct-garbage'
--------------------------------------------
ENDPOINT: /ct-multi
TITLE: Content-Type: 5 MIME types
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Type': 'text/html, application/json, image/png, text/xml, application/octet-stream'}
Body: b'what am i?'
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 03:59:55 GMT'), ('Content-Type', 'text/html, application/json, image/png, text/xml, application/octet-stream')]
Body: b'what am i?'
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Type': 'text/html, application/json, image/png, text/xml, application/octet-stream'}
Body: b'what am i?'
[aiohttp]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Type': 'text/html, application/json, image/png, text/xml, application/octet-stream'}
Body: b'what am i?'
--------------------------------------------
ENDPOINT: /ct-empty
TITLE: Content-Type: (empty)
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Type': ''}
Body: b'hello'
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 03:59:55 GMT'), ('Content-Type', '')]
Body: b'hello'
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Type': ''}
Body: b'hello'
[aiohttp]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Type': ''}
Body: b'hello'
--------------------------------------------
ENDPOINT: /ct-null
TITLE: Content-Type: text/\x00html
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Type': 'text/\x00html'}
Body: b'hello'
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 03:59:55 GMT'), ('Content-Type', 'text/\x00html')]
Body: b'hello'
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Type': 'text/\x00html'}
Body: b'hello'
[aiohttp]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Type': 'text/\x00html'}
Body: b'hello'
--------------------------------------------
ENDPOINT: /ct-emoji
TITLE: Content-Type: emoji
[urllib.request]
Status: 200
Headers: {'Content-Type': 'ð\x9f\x92\x80/ð\x9f\x94¥', 'Content-Length': '5'}
Body: b'hello'
[http.client]
Status: 200 OK
Headers: [('Content-Type', 'ð\x9f\x92\x80/ð\x9f\x94¥'), ('Content-Length', '5')]
Body: b'hello'
[requests]
Status: 200
Headers: {'Content-Type': 'ð\x9f\x92\x80/ð\x9f\x94¥', 'Content-Length': '5'}
Body: b'hello'
[aiohttp]
Status: 200
Headers: {'Content-Type': '
💀/
🔥', 'Content-Length': '5'}
Body: b'hello'
--------------------------------------------
ENDPOINT: /ct-mega
TITLE: Content-Type: 10KB long
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Type': 'text/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA... (10106 chars total)
Body: b'hello'
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 03:59:55 GMT'), ('Content-Type', 'text/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA... (10112 chars total)
Body: b'hello'
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Type': 'text/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA... (10106 chars total)
Body: b'hello'
[aiohttp]
ERROR: ClientResponseError: 400, message='Got more than 8190 bytes (10005) when reading Header value is too long.', url='
http://127.0.0.1:60666/ct-mega'
--------------------------------------------
ENDPOINT: /ct-crlf
TITLE: Content-Type with CRLF injection
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Type': 'text/html', 'X-Injected': 'true'}
Body: b'hello'
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 03:59:55 GMT'), ('Content-Type', 'text/html'), ('X-Injected', 'true')]
Body: b'hello'
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Type': 'text/html', 'X-Injected': 'true'}
Body: b'hello'
[aiohttp]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Type': 'text/html', 'X-Injected': 'true'}
Body: b'hello'
--------------------------------------------
ENDPOINT: /ct-semicolon
TITLE: Content-Type with 50 charsets
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Type': 'text/html;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=u... (810 chars total)
Body: b'hello'
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 03:59:55 GMT'), ('Content-Type', 'text/html;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;char... (816 chars total)
Body: b'hello'
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Type': 'text/html;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=u... (810 chars total)
Body: b'hello'
[aiohttp]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:55 GMT', 'Content-Type': 'text/html;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=utf-8;charset=u... (810 chars total)
Body: b'hello'
--------------------------------------------
ENDPOINT: /status-neg
TITLE: Status: -1
[urllib.request]
ERROR: BadStatusLine: HTTP/1.1 -1 BROKEN
[http.client]
ERROR: BadStatusLine: HTTP/1.1 -1 BROKEN
[requests]
ERROR: ConnectionError: ('Connection aborted.', BadStatusLine('HTTP/1.1 -1 BROKEN\r\n'))
[aiohttp]
ERROR: ClientResponseError: 400, message="Invalid status code:\n\n b'HTTP/1.1 -1 BROKEN'\n ^", url='
http://127.0.0.1:60666/status-neg'
--------------------------------------------
ENDPOINT: /status-zero
TITLE: Status: 0
[urllib.request]
ERROR: BadStatusLine: HTTP/1.1 0 NOTHING
[http.client]
ERROR: BadStatusLine: HTTP/1.1 0 NOTHING
[requests]
ERROR: ConnectionError: ('Connection aborted.', BadStatusLine('HTTP/1.1 0 NOTHING\r\n'))
[aiohttp]
ERROR: ClientResponseError: 400, message="Invalid status code:\n\n b'HTTP/1.1 0 NOTHING'\n ^", url='
http://127.0.0.1:60666/status-zero'
--------------------------------------------
ENDPOINT: /status-999
TITLE: Status: 999
[urllib.request]
ERROR: HTTPError: HTTP Error 999:
[http.client]
Status: 999
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 03:59:56 GMT')]
Body: b'hello'
[requests]
Status: 999
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:56 GMT'}
Body: b'hello'
[aiohttp]
Status: 999
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:56 GMT'}
Body: b'hello'
--------------------------------------------
ENDPOINT: /status-huge
TITLE: Status: 99999
[urllib.request]
ERROR: BadStatusLine: HTTP/1.1 99999 WAY TOO BIG
[http.client]
ERROR: BadStatusLine: HTTP/1.1 99999 WAY TOO BIG
[requests]
ERROR: ConnectionError: ('Connection aborted.', BadStatusLine('HTTP/1.1 99999 WAY TOO BIG\r\n'))
[aiohttp]
ERROR: ClientResponseError: 400, message="Invalid response status:\n\n b'HTTP/1.1 99999 WAY TOO BIG'\n ^", url='
http://127.0.0.1:60666/status-huge'
--------------------------------------------
ENDPOINT: /status-word
TITLE: Status: BANANA
[urllib.request]
ERROR: BadStatusLine: HTTP/1.1 BANANA OK
[http.client]
ERROR: BadStatusLine: HTTP/1.1 BANANA OK
[requests]
ERROR: ConnectionError: ('Connection aborted.', BadStatusLine('HTTP/1.1 BANANA OK\r\n'))
[aiohttp]
ERROR: ClientResponseError: 400, message="Invalid status code:\n\n b'HTTP/1.1 BANANA OK'\n ^", url='
http://127.0.0.1:60666/status-word'
--------------------------------------------
ENDPOINT: /hdr-mega-name
TITLE: Header name: 64KB of As
[urllib.request]
ERROR: LineTooLong: got more than 65536 bytes when reading header line
[http.client]
ERROR: LineTooLong: got more than 65536 bytes when reading header line
[requests]
ERROR: ConnectionError: ('Connection aborted.', LineTooLong('got more than 65536 bytes when reading header line'))
[aiohttp]
ERROR: ClientResponseError: 400, message='Got more than 8190 bytes (65542) when reading Header name is too long.', url='
http://127.0.0.1:60666/hdr-mega-name'
--------------------------------------------
ENDPOINT: /hdr-mega-val
TITLE: Header value: 1MB of Bs
[urllib.request]
ERROR: LineTooLong: got more than 65536 bytes when reading header line
[http.client]
ERROR: LineTooLong: got more than 65536 bytes when reading header line
[requests]
ERROR: ConnectionError: ('Connection aborted.', LineTooLong('got more than 65536 bytes when reading header line'))
[aiohttp]
ERROR: ClientResponseError: 400, message='Got more than 8190 bytes (65439) when reading Header value is too long.', url='
http://127.0.0.1:60666/hdr-mega-val'
--------------------------------------------
ENDPOINT: /hdr-1000
TITLE: 1000 headers
[urllib.request]
ERROR: HTTPException: got more than 100 headers
[http.client]
ERROR: HTTPException: got more than 100 headers
[requests]
ERROR: ConnectionError: ('Connection aborted.', HTTPException('got more than 100 headers'))
[aiohttp]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:56 GMT', 'X-H0': '0', 'X-H1': '1', 'X-H2': '2', 'X-H3': '3', 'X-H4': '4', 'X-H5': '5', 'X-H6': '6', 'X-H7': '7', 'X-H8': '8', 'X-H9': '9', 'X-H10': '10', 'X-H11': '11', 'X-H12': '12', 'X-H13': '13', 'X-H14': '14', 'X-H15': '15'... (16861 chars total)
Body: b'hello'
--------------------------------------------
ENDPOINT: /hdr-empty-name
TITLE: Header: : empty_name
[urllib.request]
Status: 200
Headers: {'Content-Length': '5'}
Body: b'hello'
[http.client]
Status: 200 OK
Headers: [('Content-Length', '5')]
Body: b'hello'
[requests]
Status: 200
Headers: {'Content-Length': '5'}
Body: b'hello'
[aiohttp]
ERROR: ClientResponseError: 400, message="Invalid header token:\n\n b': empty_name'\n ^", url='
http://127.0.0.1:60666/hdr-empty-name'
--------------------------------------------
ENDPOINT: /hdr-no-colon
TITLE: Header without colon
[urllib.request]
Status: 200
Headers: {}
Body: b'hello'
[http.client]
Status: 200 OK
Headers: []
Body: b'hello'
[requests]
Status: 200
Headers: {}
Body: b'hello'
[aiohttp]
ERROR: ClientResponseError: 400, message="Invalid header token:\n\n b'BrokenHeaderNoColon'\n ^", url='
http://127.0.0.1:60666/hdr-no-colon'
--------------------------------------------
ENDPOINT: /hdr-dup-cl
TITLE: Duplicate Content-Length
[urllib.request]
Status: 200
Headers: {'Content-Length': '5'}
Body: b'hello'
[http.client]
Status: 200 OK
Headers: [('Content-Length', '5'), ('Content-Length', '999')]
Body: b'hello'
[requests]
ERROR: InvalidHeader: Content-Length contained multiple unmatching values (5, 999)
[aiohttp]
ERROR: ClientResponseError: 400, message="Duplicate Content-Length:\n\n b'Content-Length: 999'\n ^", url='
http://127.0.0.1:60666/hdr-dup-cl'
--------------------------------------------
ENDPOINT: /hdr-null
TITLE: Header with null bytes
[urllib.request]
Status: 200
Headers: {}
Body: b'hello'
[http.client]
Status: 200 OK
Headers: []
Body: b'hello'
[requests]
Status: 200
Headers: {}
Body: b'hello'
[aiohttp]
ERROR: ClientResponseError: 400, message="Invalid header token:\n\n b'X-'\n ^", url='
http://127.0.0.1:60666/hdr-null'
--------------------------------------------
ENDPOINT: /hdr-newline
TITLE: Header with bare \n
[urllib.request]
Status: 200
Headers: {'X-Bad': 'line1'}
Body: b'hello'
[http.client]
Status: 200 OK
Headers: [('X-Bad', 'line1')]
Body: b'hello'
[requests]
Status: 200
Headers: {'X-Bad': 'line1'}
Body: b'hello'
[aiohttp]
ERROR: ClientResponseError: 400, message="Invalid header token:\n\n b'X-Bad: line1\\nline2'\n ^", url='
http://127.0.0.1:60666/hdr-newline'
--------------------------------------------
ENDPOINT: /body-endless
TITLE: Infinite body stream
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 03:59:56 GMT', 'Content-Type': 'application/octet-stream'}
Body: b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'... (8192 bytes total)
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 04:00:03 GMT'), ('Content-Type', 'application/octet-stream')]
Body: b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'... (8192 bytes total)
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:00:10 GMT', 'Content-Type': 'application/octet-stream'}
Body: b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'... (8192 bytes total)
[aiohttp]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:00:17 GMT', 'Content-Type': 'application/octet-stream'}
Body: b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'... (1024 bytes total)
--------------------------------------------
ENDPOINT: /body-none
TITLE: Content-Length: 5, no body
[urllib.request]
Status: 200
Headers: {'Content-Length': '5'}
Body: b''
[http.client]
Status: 200 OK
Headers: [('Content-Length', '5')]
Body: b''
[requests]
ERROR: ProtocolError: ('Connection broken: IncompleteRead(0 bytes read, 5 more expected)', IncompleteRead(0 bytes read, 5 more expected))
[aiohttp]
ERROR: ClientPayloadError: Response payload is not completed:
--------------------------------------------
ENDPOINT: /body-binary
TITLE: 4KB binary as text/html
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:00:17 GMT', 'Content-Type': 'text/html'}
Body: b"r\xac\xab\x1a\xc9\xd1c\xc5\xfc\xc0Uf\xe4\x9c\xcb\x86\xd1N\xfa\xca;w\x0bJ\xa9\xc2\x1c_v\xdc\xaa\x1f\x14\x14\x12vK^\xf1\x05.\xb5J\xee\xe1\xde\xf0f<\xba>\xb24:_+\xb4|c't\x0b\x90\xf8\x05\xd5\x8fJ\x1bO\xf7kF%\x89\x82\xe3\xb6\x8a\xed\x8c\x97\x12\x1b!\x9f\x18\x96\xc5\xebP\xf5\x0bN\x164N\xbe\xd6\xe6m4/\x05\xf9h`!\xfde`\xdd\x9ed\xd3\x9b'q\xa8\xd2\x8f:\xe1\xf9\x8c4c\xd3\xb9\x8bR\x83\xd2\xa5q\xef\xd7U\xfeF\xd0\x80`N\xa7\xde(c\xa6\x1b\x16%Y\x13\xed\xf9\xec?Q}\x9c\x83 P\x9c\x91\x83\xcb\xff?\x9c\x90\xb52\xb4\xf2;#\xbe\x16\x17\xdf\x8aD\xa6\xeb\x08\x0f\xde$9\xf3\x1aX_\xd3\xd8G\xa4\x84x\x03\x80\x80\x16\x12\xc4\x91\x15\xf9Lz\xf0\xef\x03\xb7\x17U\x9a\xa8\x9dq\xa2`kf/\x81\xae\x9c\xf4\xed\xeel\x06\xe0\xfcD\xa6\xf3\xbd\x12/\xbb'\r\xfa\x1f\xec\r\xb1\xbb\x82\x9eL\x8a\xcdS\xf9\xd6S\x15J\xb1\xd7\x1b\x1c\x08\xa8v\x84\xb1\x92\xdd-X\x84^\xd8\x16kI\xf8o\xebK\x92=!v\x8cF~\x80\xbdv\xeb\xeb\xed\x13\xba;w!\x98\xa8\x14\nn\xc5IN\xbf\xc7\xa3\x98!\x03\xce\x05}\x89\xa4\x01\x91\xf7!;#\xd2\x10\x96\xd6\x0e\xefAd-?\x1a\xd6g\xc11\x89c\xbe\xc4\xcc\xa1Z\x0ct\xed[73\x84e\xf8\x91\x8b\t\xcd\xa85UC\xed\x87\xaf\xbd\x80\xd3q\x99\xe3\xa4\xb41\x06a\xf7\x91\xd2\x7f\x92\x143\x15\xa7D\x02\xc2\xcb\xca\xee\x11\x01\x98\x86\xd1\r\xd2\x92\xfb\x07)\xd2\xb4\x8f\xde\xaf\xb6Hv\xae'\x95?s\xf3\x7fg5\xbe\xf7\n\x90\xa2\xc2\x828\xe1\xdb\x0bKM\xb0\xeb\xe2Q\\\x82\xb9U\xd0\xd8d\x00\xd1?\xae\xc7\xdbC2R\x88e'Z\x14m5'\xf8Z\t\x1b\x96\xbe\x87\xafhd\x94~\x84g)\x92\xbd/\xe9f\xa1\xdaYglX&MFu\xd6\xad;p"... (4096 bytes total)
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 04:00:17 GMT'), ('Content-Type', 'text/html')]
Body: b'Y\x88\xc4\x07\x974(\xcc\xd7\x9bZ\xa3\x8a\xff\n\xf3\xb8\xbdMY\x87\xf5\xc4\xc2\x16\x19G\x9a\x1b\x08v$\x829\x8f\xf1\xd8\xa59F=\x86\x06u\xef\x10\xa3\xf8\x13W.\x1c-\x08zm\x99\xa7\xb7\xf4\xfbi\xa5B\xce\x02?\x9e\x9d\xb1"\xd1)\x8a\x8b\x80n\xb8Y\xe6\xa5\x9c\xe0\x10\xe01\x87_\x96\x9f\xfa+\xc5&\x1a\x04*\xb4\xacs(>c\x9aP\xaaioZl,\xa8\xdd\xa6*\x85\xfd\x87\x13F$\xa8Jp\x10\xec\x9f\xaf1\xc6J\x12Y\xe1\'$&}\xf7\x8by +\xab\x08\xa7\xcc\xbeRX)}\xa7\x88\xa6\x87M\xfc{\xd7\xf2X\x10\x94\xc6\xf99\xbb\xc4\x83\x82\xa4\xce{Y\xfa\xa3/\xa0\xa4\xc7B_"\xfe\xab\xc2i\x8e\xd2\x9b\x858\xbd\xd5\x8aC\xebz\x81\xe1\x80BZ\xcbZ\xc3\x9f`(\xec\xb2w\x84a\x10\xa3\xf2_d\tXU"\xef0;N@\x9aEr\xaa\xac\xc8\x8f\xc2\xc9!\xc3.\x1a\x80\xfa\xb33\x1d}\x81\x06i*0\xea8\xbc\xcc\x0e\x8f\r\xeb5\xb8>\x1d\xe2\xfb\xe3\xf9]+\x92f}\x82\x919Wf\xdd\xf1\n\xe2@\xa9~\xea\x0eK\x8e\xd8\x14\xd5\xc2k\xa8O\x88V=Kr\xd4$p\x00\x1a8\xcdV\x88\xa1l\x0eB\xb5MM\xa534\x13I!\xf6\x03>q\xbeF\xf7\xf9\xab\x10\xd6\x99\xbaOx\xc2\xdb\x14j\x14\x01\x9b1\r\xe5\xc4[x\xdc\x05\x02\xcd\xf6]\xa0\x19\xce\xfd\x04\x92\xe5\xc0M\xb1\xd0\xfb\xb3\x01\xa6\xf8G47\x8cA\xa1\x81W\x1dy\xd1\xc2\xa5\x08\x93\x07\xc2\xae\x17\xd3\xc2i\xb2\x89j\x18\x85[)S\xd8\xff\xd0i\xf3k\xef\x9c\xd4\xd70\x9f\xb0\x0bX{\x15%\xcc\xccf\x9e~\xd1\xed5#\xf9\xba\x96C\xe5P\xe2\xf3t\xf6GG\x1f\xba\xd6\xdfQ\xd6\xb2\xf6\x15\xb2\xb9\xb7\x12\xbaQ2\x9a\x1d\xfa\xdd\xbf)5\xba\xee\xd6$\x96\xe5W\x91\x1e\xef\xb9\xe2\xa9D\xd3\x1a\x06\xe7\x8f\x97\x0b\x0b\xe6\xad\xc9\xf3\xbf\x93\xe9\x8dV\xe6\xb0\xdc'... (4096 bytes total)
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:00:17 GMT', 'Content-Type': 'text/html'}
Body: b'\xe4\x8f\xd3\xe4C\x9a\xca5)\xa6\xf0\x96\x0e\xf7\x93\xc8\xcf\xd1\t\xb0r\xbd\xca\x85* \xc7ZV\x16\xc2\x1c\x12yf\xf1\xf8g\xa4\x05\xb3\xb0\x8dU\xa5\x99\'\x83\rWA\xea\xf1\xad\xd0\xb1\x9f\x15X-u\xe8\xd9lW\x1an\xed\xd9\x12\xcf\x9d<&l\x8b\xba\x11*@E\xfah\x8c\x99\xf8\xbb\xd3f\xb8\x91$\xb2\r\xa0a\x8fu]\xb1\x8c\x977\x8b\x1c\x9e\xe0\\\x01\x97=\nE\x97\x01\x99\x8c\xf9Z\x0e\xcf\xc6\xc3\x03\xca\x83x)R\x1f/3$*\xcd\x15\xb4\xa5_\n3C\xa3F\xe0\xff\xf6\x05\x1a$G\xa8k\xafEx[}\xe1\xdc\xaf\xa532\xf2\xc3p\xb0\xceN\xdd\xa2\xdd\xd0\x18\xa8\xce*!*\xd4\x9f%x\xf5\x9f\xad\xbf\xef-\xec\xb3;y5\xab\x895\xbcx\xa5F\xbf\xa8\xd1\x19\x15\x99\xb9>Q\xa1\x87R\xd8\xcbc\x195|\x1b\xe9\x93p\x8c\x9c\xc0\xf3kBT5\xafhg\xfc\xb4\xb1\xc4\x17\x07\xdc\xc3\xc7$\x91\xf3\x87\x12\x7fx\xbfz\xbe\'=\xaa\x94\xbc\xd9\r\x95k\x00pF\x9bY\xb1Q\xe1\x1e\x8e\xda\x98\xebjN\x98\xe5HSp@\x9a\x9e\x94\xf5\xac;e\xce\x10#\xc3#J\xd1z\x94\xa7 \x93\x92\xb8\xcb\xa1\xc4\xf1\x8en\x8b\x1b\x00\x82X\x1eJ/6\x96sF\\\x19\xeam".(!:8\xb2\xf3C&\xc0\xe3\x92\tvP\xd9\xc1u\x84g/\x95Kt\xc2\xa8:g\x8f\x9b\x8c\xc1\xaaO=\x03N\x1a\x80\xbf\x11)\x1f\x9b0\x9d_`\x86 \x8c\xd8!M\x1cVY\t\xfc\xc9\x04\t5\xc2c\x11\x15\xb8\xffe\xa1\xe3,Y\xfe\x80\xf5j\xb5\x18\xc5\xb6Y\x07;&\xbfn\xdd@0\xad\x9d\xd2NP\xa8\x88\x94\x17\x9b\x8cv\xdd\x9e5\x1b\xb8K\xa5t\xf5\xfc\x8d\xc2\xbb\xbc\xd54\x03\xa6\x97_\xf3#}\xf1\x1f<\x100\x97$\xd6\xc1\xfc\x14\xd4-6\xb8 p\xb2\xa0\x13\x8b\xf2\xbc\xa6\xba\xa9J0M\x83JAE{:T\xdd\x02N\xa1\x96\xf2\xb2wi\xee'... (4096 bytes total)
[aiohttp]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:00:17 GMT', 'Content-Type': 'text/html'}
Body: b"\xd7\x1f\x02\x1b\xe2)\xab\xa3k\xe84i\xb9Jc!\x84\xf8\x9c\xe1N\xfdw\xada\x11~\xd6\xc5z\xe6\x11Ab\xb8\xbb1\xe2\xf4\xe7\xf6u`9I\xb0\x1e\x85\x89\xb3\x01\xea\xcb\x01\x8a\xf4\xf8\x83\xf6n\x19-J\x7f\xcf\x8c\xd4\xc5\x90h~\x95\xb5j\x93b[I\x90F\x0e\xec\x01\x038\xb0SA_a\x9b\xee2\x92\xbf\xf9\xe7\x99\xb1\xc1w\xe1\xdb\x13a\xa7j\x84\xd19\xdcz8\xab\xa4c\x97\xad;7|>h\x8a!5\xc2\xea\x81\xdb\xb5\xde`\xee85\xad\xf8\xa4D\x9aA\xe53\x0ej\xf2b\xac\xcd\x9a\xb8f\xd7\xe5\xed\xa9/\xee\xddM>D\xc5\xff\xa1\x00\x9f6\xf2\xfe\xcaf\xf6s\xc6\xff\xb8\xaet\x85_\xbe\x9e\x1bv\xc1Cqq\xcb\x93*@\xbfI\xd8\x9d\xfa\x9anm\x9dg\x08'\xb3^\xb1/\xe6\xb3\xa1\x80*\x96\xc6\xd9q\xdc\xff\x99>1\x97\x03\xb0>\x89\x81A\xbc3^\xd1n>M\xf9\x80\x1a\xa4%\n\t\xf4\x1a\x82\t\xd2A\xf2$n\x83/V\x0e1c\n_6F\x95@\xe0\xb1\x97,\x8e\x9a:\x9a0\x99\x1f\x1dt#j\xbbj\x15KbF\xc2A\xed<\xa72\xa3\xa5\xf9\xe6}|M\xec\xd5\xe6\xc6\xd5+F\xa8\x8d\xe1\x8b\xeb\xdc\xb2\x08\xba\xe3(\xbe9n\x1d\xf9\x07rKLE\x03:T \xf7-\\*\xa9\n\xfeR_]\xaf]\xec\x13\xdc]\xb2\x07\x07\xd7\xcd\xc6E\x81-\x19\x98\x83\xe4\x98\x85\xeaC\x0b\xea\xda\xdeq\xab\xe5\xb0\xda`\xaa\xa6\xdf8z\xf2N\x83\x8a \x02\xa9\xd3\xe5\xcc\xeb(\x9b[\xdcv\x91\r\xb2y5\xd6\x13\x85\xe4\x8d\xe2\x90\xf0w\xd4\xa2\xc5e\x1a\x12\xb2\xe53\n\xa4S\x0e\x0e\xc4O=y\xa6UF\xe6@\x8e\xe1\xfc\x10\xe2\xe4u\x90w\xd1\xaf\x02\xfd1\x1a¾cH[¶Ó#ºÓ~Ýê@¥
óXÒø
g!ÇI³gÉ[
Ç
I
*}
Ð
«ôÿ-
Rñm¦Ó
¿qÏ^FJz_
°»
s3 A
X
ùðM¨±6
Ë#
\VèR¥
ÚX¥ÿÂüµ/Æ\et
>=
¯(Ißw(a
u
½á
x¤g@»^½z
wt<%6
»Ç»¦
m
Ëß
àG¹À\̰jËrØYÎ"
~KY
Iq³>
çPÑu
©¿]F«üÝ
Ï
·
îDöK
¿©
ö~
×\
i~fÛ
Å}Ì+Jc&¢¥
÷ùY¤Èúy0
èýRSúyĺ߬·2äþ¡
ïÌ6Áj
x
%y_
:
eº«g
sqܾoj
@îÉ
¿M¥
`i
©Àíj
/}
IY
ìA
ªäؼéÍ+öÐ
IG$ÙBêwÕæÔn*¥;ÕSþ
,<
;
2)"Ũ
y{%²È
tÙ)Ð|äLüä
\23¢í
n
*
2§2NïÖ
ýÓr÷
·¦ ~k5
´¨/¹
´¬k_IÉ
[requests]
ERROR: ConnectionError: ('Connection aborted.', BadStatusLine('ǨµK[DJ¾$5\n'))
[aiohttp]
ERROR: ClientResponseError: 400, message='Expected HTTP/, RTSP/ or ICE/:\n\n b\'=\\xfe\\x1c\\xb6\\xa6\\xe0\\xc1x\\x95-\\xc1\\xe6\\xfb\\x95m\\xa6\\xfdq\\xc0\\xaa8\\x12j\\xd7\\x99~!\\xae4{\\xe7\\x0c\\xca\\x98\\x9d\\xda@\\x976\\x16\\xc0\\xb3*\\xbe9\\x07\\x9eR:\\n\\x17m\\xcaW\\\\\\x9f\\x80\\xdd\\x1c\\x96d\\xd6\\x8d\\x18W\\xc2\\xec)\\xdd\\xef3g\\xbc\\xc7\\xbc25U\\x9b\\xa1)euG\\xd1X]\\xf6\\xaf\\xd9\\xc8\\x075\\x02\\x15\\x9c\\x9c\\x897N\\x05\\xe8\\xf9\\x11\\xe2\\x83\\x94Z6u\\xcd\\xceH\\xed\\xfe\\xd6\\xc2?=\\x13\\xf3M\\x9d\\xcf4h)\\x17\\x93\\xef\\xf6FTU\\xff\\xdd"\\xe4\\xfa\\x7f\\xee=\\xb3G\\xb8qd\\x84+2\\xb8O0f\\xf6\\xc1\\xee\\xcb\\xab\\x95\\xea\\x17\\xc4\\xf8c\\x14M\\xc2u`\\xac\\x90G\\xe4\\xb56-@}DV\\xf7\\x83\\xa6\\xf8\\x0fi\\x917\\xbap\\x10\\xb9\\x13I7\\t\\xc4\\xe14xS\\x87\\xfbS>\\xc8\\x9aA\\x92r\\xba\\xb0\\x98\\x12\\xaao\\xc4\\xecTG\\xc2\\xb3\\x9a\\xc1\\xb2\\x08\\x97s\\x0e1\\xd6\\xf8\\\\\\xb2\\x7fUil3\\xbf\\xa6\\xc9\\xe5\\x1b\\x17\\x1d04\\x17\\x9d?|S\\x17?\\x047\\x9aQC5\\xf4o\\xc2\\xec\\xaa\\xf2\\xc5\\xf4g\\x02\\x15\\xca\\x1e3>\\x1e8\\xfaW>\\xd6}y\\x95\\xab\'\n ^', url='
http://127.0.0.1:60666/proto-garbage'
--------------------------------------------
ENDPOINT: /proto-empty
TITLE: Empty response (0 bytes)
[urllib.request]
ERROR: RemoteDisconnected: Remote end closed connection without response
[http.client]
ERROR: RemoteDisconnected: Remote end closed connection without response
[requests]
ERROR: ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))
[aiohttp]
ERROR: ServerDisconnectedError: Server disconnected
--------------------------------------------
ENDPOINT: /proto-half
TITLE: HTTP/9.9 version
[urllib.request]
ERROR: UnknownProtocol: HTTP/9.9
[http.client]
ERROR: UnknownProtocol: HTTP/9.9
[requests]
ERROR: ConnectionError: ('Connection aborted.', UnknownProtocol('HTTP/9.9'))
[aiohttp]
ERROR: ClientResponseError: 400, message="Invalid HTTP version:\n\n b'HTTP/9.9 200 OK'\n ^", url='
http://127.0.0.1:60666/proto-half'
--------------------------------------------
ENDPOINT: /proto-no-headers
TITLE: Status line + body, no headers
[urllib.request]
Status: 200
Headers: {}
Body: b'hello'
[http.client]
Status: 200 OK
Headers: []
Body: b'hello'
[requests]
Status: 200
Headers: {}
Body: b'hello'
[aiohttp]
Status: 200
Headers: {}
Body: b'hello'
--------------------------------------------
ENDPOINT: /proto-just-newlines
TITLE: Response is just CRLF
[urllib.request]
ERROR: BadStatusLine:
[http.client]
ERROR: BadStatusLine:
[requests]
ERROR: ConnectionError: ('Connection aborted.', BadStatusLine('\r\n'))
[aiohttp]
ERROR: ServerDisconnectedError: Server disconnected
--------------------------------------------
ENDPOINT: /enc-utf16
TITLE: Body is UTF-16, header says UTF-8
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:00:17 GMT', 'Content-Type': 'text/html; charset=utf-8'}
Body: b'\xff\xfeS0\x930k0a0o0'
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 04:00:17 GMT'), ('Content-Type', 'text/html; charset=utf-8')]
Body: b'\xff\xfeS0\x930k0a0o0'
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:00:17 GMT', 'Content-Type': 'text/html; charset=utf-8'}
Body: b'\xff\xfeS0\x930k0a0o0'
[aiohttp]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:00:17 GMT', 'Content-Type': 'text/html; charset=utf-8'}
Body: b'\xff\xfeS0\x930k0a0o0'
--------------------------------------------
ENDPOINT: /enc-gzip-lie
TITLE: Content-Encoding: gzip (plaintext)
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:00:17 GMT', 'Content-Encoding': 'gzip'}
Body: b'this is definitely not gzipped'
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 04:00:17 GMT'), ('Content-Encoding', 'gzip')]
Body: b'this is definitely not gzipped'
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:00:17 GMT', 'Content-Encoding': 'gzip'}
Body: b'this is definitely not gzipped'
[aiohttp]
ERROR: ClientPayloadError: 400, message:
Can not decode content-encoding: gzip
--------------------------------------------
ENDPOINT: /redir-self
TITLE: 301 redirect loop
[urllib.request]
ERROR: HTTPError: HTTP Error 301: The HTTP server returned a redirect error that would lead to an infinite loop.
The last 30x error message was:
Moved Permanently
[http.client]
Status: 301 Moved Permanently
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 04:00:17 GMT'), ('Location', '/redir-self')]
Body: b''
[requests]
Status: 301
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:00:17 GMT', 'Location': '/redir-self'}
Body: b''
[aiohttp]
Status: 301
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:00:17 GMT', 'Location': '/redir-self'}
Body: b''
--------------------------------------------
ENDPOINT: /redir-garbage
TITLE: 301 garbage Location URL
[urllib.request]
ERROR: HTTPError: HTTP Error 404: Not Found
[http.client]
Status: 301 Moved
Headers: [('Location', '\x00ÿ://ð\x9f\x92\x80:99999/../../etc/passwd'), ('Content-Length', '0')]
Body: b''
[requests]
ERROR: UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 1: invalid start byte
[aiohttp]
Status: 301
Headers: {'Location': '\x00\udcff://
💀:99999/../../etc/passwd', 'Content-Length': '0'}
Body: b''
--------------------------------------------
ENDPOINT: /redir-chain
TITLE: 302 infinite unique chain
[urllib.request]
ERROR: HTTPError: HTTP Error 302: The HTTP server returned a redirect error that would lead to an infinite loop.
The last 30x error message was:
Found
[http.client]
Status: 302 Found
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 04:00:17 GMT'), ('Location', '/redir-chain?n=1')]
Body: b'Hop 0'
[requests]
Status: 302
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:00:17 GMT', 'Location': '/redir-chain?n=1'}
Body: b''
[aiohttp]
Status: 302
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:00:17 GMT', 'Location': '/redir-chain?n=1'}
Body: b'Hop 0'
--------------------------------------------
ENDPOINT: /slow-headers
TITLE: Slowloris: 1 byte per 0.5s
[urllib.request]
Status: 200
Headers: {'Content-Length': '5'}
Body: b'hello'
[http.client]
Status: 200 OK
Headers: [('Content-Length', '5')]
Body: b'hello'
[requests]
Status: 200
Headers: {'Content-Length': '5'}
Body: b'hello'
[aiohttp]
ERROR: TimeoutError:
--------------------------------------------
ENDPOINT: /slow-body
TITLE: Body: 1 byte per second (a-z)
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:01:25 GMT', 'Content-Length': '26', 'Content-Type': 'text/plain'}
Body: b'abcdefghijklmnopqrstuvwxyz'
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 04:01:50 GMT'), ('Content-Length', '26'), ('Content-Type', 'text/plain')]
Body: b'abcdefghijklmnopqrstuvwxyz'
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:15 GMT', 'Content-Length': '26', 'Content-Type': 'text/plain'}
Body: b'abcdefghijklmnopqrstuvwxyz'
[aiohttp]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Length': '26', 'Content-Type': 'text/plain'}
Body: b'a'
--------------------------------------------
ENDPOINT: /html-utf16
TITLE: Full HTML page as UTF-16LE
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'text/html'}
Body: b'<\x00h\x00t\x00m\x00l\x00>\x00<\x00h\x00e\x00a\x00d\x00>\x00<\x00t\x00i\x00t\x00l\x00e\x00>\x00U\x00T\x00F\x00-\x001\x006\x00L\x00E\x00 \x00E\x00n\x00c\x00o\x00d\x00e\x00d\x00 \x00P\x00a\x00g\x00e\x00<\x00/\x00t\x00i\x00t\x00l\x00e\x00>\x00<\x00/\x00h\x00e\x00a\x00d\x00>\x00<\x00b\x00o\x00d\x00y\x00>\x00<\x00h\x001\x00>\x00T\x00h\x00i\x00s\x00 \x00e\x00n\x00t\x00i\x00r\x00e\x00 \x00p\x00a\x00g\x00e\x00 \x00i\x00s\x00 \x00U\x00T\x00F\x00-\x001\x006\x00L\x00E\x00<\x00/\x00h\x001\x00>\x00<\x00p\x00>\x00B\x00u\x00t\x00 \x00t\x00h\x00e\x00 \x00s\x00e\x00r\x00v\x00e\x00r\x00 \x00n\x00e\x00v\x00e\x00r\x00 \x00d\x00e\x00c\x00l\x00a\x00r\x00e\x00d\x00 \x00a\x00 \x00c\x00h\x00a\x00r\x00s\x00e\x00t\x00.\x00 \x00G\x00o\x00o\x00d\x00 \x00l\x00u\x00c\x00k\x00 \x00d\x00e\x00c\x00o\x00d\x00i\x00n\x00g\x00!\x00<\x00/\x00p\x00>\x00<\x00/\x00b\x00o\x00d\x00y\x00>\x00<\x00/\x00h\x00t\x00m\x00l\x00>\x00'
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 04:02:40 GMT'), ('Content-Type', 'text/html')]
Body: b'<\x00h\x00t\x00m\x00l\x00>\x00<\x00h\x00e\x00a\x00d\x00>\x00<\x00t\x00i\x00t\x00l\x00e\x00>\x00U\x00T\x00F\x00-\x001\x006\x00L\x00E\x00 \x00E\x00n\x00c\x00o\x00d\x00e\x00d\x00 \x00P\x00a\x00g\x00e\x00<\x00/\x00t\x00i\x00t\x00l\x00e\x00>\x00<\x00/\x00h\x00e\x00a\x00d\x00>\x00<\x00b\x00o\x00d\x00y\x00>\x00<\x00h\x001\x00>\x00T\x00h\x00i\x00s\x00 \x00e\x00n\x00t\x00i\x00r\x00e\x00 \x00p\x00a\x00g\x00e\x00 \x00i\x00s\x00 \x00U\x00T\x00F\x00-\x001\x006\x00L\x00E\x00<\x00/\x00h\x001\x00>\x00<\x00p\x00>\x00B\x00u\x00t\x00 \x00t\x00h\x00e\x00 \x00s\x00e\x00r\x00v\x00e\x00r\x00 \x00n\x00e\x00v\x00e\x00r\x00 \x00d\x00e\x00c\x00l\x00a\x00r\x00e\x00d\x00 \x00a\x00 \x00c\x00h\x00a\x00r\x00s\x00e\x00t\x00.\x00 \x00G\x00o\x00o\x00d\x00 \x00l\x00u\x00c\x00k\x00 \x00d\x00e\x00c\x00o\x00d\x00i\x00n\x00g\x00!\x00<\x00/\x00p\x00>\x00<\x00/\x00b\x00o\x00d\x00y\x00>\x00<\x00/\x00h\x00t\x00m\x00l\x00>\x00'
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'text/html'}
Body: b'<\x00h\x00t\x00m\x00l\x00>\x00<\x00h\x00e\x00a\x00d\x00>\x00<\x00t\x00i\x00t\x00l\x00e\x00>\x00U\x00T\x00F\x00-\x001\x006\x00L\x00E\x00 \x00E\x00n\x00c\x00o\x00d\x00e\x00d\x00 \x00P\x00a\x00g\x00e\x00<\x00/\x00t\x00i\x00t\x00l\x00e\x00>\x00<\x00/\x00h\x00e\x00a\x00d\x00>\x00<\x00b\x00o\x00d\x00y\x00>\x00<\x00h\x001\x00>\x00T\x00h\x00i\x00s\x00 \x00e\x00n\x00t\x00i\x00r\x00e\x00 \x00p\x00a\x00g\x00e\x00 \x00i\x00s\x00 \x00U\x00T\x00F\x00-\x001\x006\x00L\x00E\x00<\x00/\x00h\x001\x00>\x00<\x00p\x00>\x00B\x00u\x00t\x00 \x00t\x00h\x00e\x00 \x00s\x00e\x00r\x00v\x00e\x00r\x00 \x00n\x00e\x00v\x00e\x00r\x00 \x00d\x00e\x00c\x00l\x00a\x00r\x00e\x00d\x00 \x00a\x00 \x00c\x00h\x00a\x00r\x00s\x00e\x00t\x00.\x00 \x00G\x00o\x00o\x00d\x00 \x00l\x00u\x00c\x00k\x00 \x00d\x00e\x00c\x00o\x00d\x00i\x00n\x00g\x00!\x00<\x00/\x00p\x00>\x00<\x00/\x00b\x00o\x00d\x00y\x00>\x00<\x00/\x00h\x00t\x00m\x00l\x00>\x00'
[aiohttp]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'text/html'}
Body: b'<\x00h\x00t\x00m\x00l\x00>\x00<\x00h\x00e\x00a\x00d\x00>\x00<\x00t\x00i\x00t\x00l\x00e\x00>\x00U\x00T\x00F\x00-\x001\x006\x00L\x00E\x00 \x00E\x00n\x00c\x00o\x00d\x00e\x00d\x00 \x00P\x00a\x00g\x00e\x00<\x00/\x00t\x00i\x00t\x00l\x00e\x00>\x00<\x00/\x00h\x00e\x00a\x00d\x00>\x00<\x00b\x00o\x00d\x00y\x00>\x00<\x00h\x001\x00>\x00T\x00h\x00i\x00s\x00 \x00e\x00n\x00t\x00i\x00r\x00e\x00 \x00p\x00a\x00g\x00e\x00 \x00i\x00s\x00 \x00U\x00T\x00F\x00-\x001\x006\x00L\x00E\x00<\x00/\x00h\x001\x00>\x00<\x00p\x00>\x00B\x00u\x00t\x00 \x00t\x00h\x00e\x00 \x00s\x00e\x00r\x00v\x00e\x00r\x00 \x00n\x00e\x00v\x00e\x00r\x00 \x00d\x00e\x00c\x00l\x00a\x00r\x00e\x00d\x00 \x00a\x00 \x00c\x00h\x00a\x00r\x00s\x00e\x00t\x00.\x00 \x00G\x00o\x00o\x00d\x00 \x00l\x00u\x00c\x00k\x00 \x00d\x00e\x00c\x00o\x00d\x00i\x00n\x00g\x00!\x00<\x00/\x00p\x00>\x00<\x00/\x00b\x00o\x00d\x00y\x00>\x00<\x00/\x00h\x00t\x00m\x00l\x00>\x00'
--------------------------------------------
ENDPOINT: /html-long-title
TITLE: HTML title is 1000 characters
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'text/html'}
Body: b'<html><head></head>
Check your tab title
</html>'
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 04:02:40 GMT'), ('Content-Type', 'text/html')]
Body: b'<html><head></head>
Check your tab title
</html>'
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'text/html'}
Body: b'<html><head></head>
Check your tab title
</html>'
[aiohttp]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'text/html'}
Body: b'<html><head></head>
Check your tab title
</html>'
--------------------------------------------
ENDPOINT: /html-irc-title
TITLE: Title with IRC injection
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'text/html'}
Body: b'<html><head></head>
IRC Injection via HTML title
</html>'
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 04:02:40 GMT'), ('Content-Type', 'text/html')]
Body: b'<html><head></head>
IRC Injection via HTML title
</html>'
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'text/html'}
Body: b'<html><head></head>
IRC Injection via HTML title
</html>'
[aiohttp]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'text/html'}
Body: b'<html><head></head>
IRC Injection via HTML title
</html>'
--------------------------------------------
ENDPOINT: /html-unicode
TITLE: Random unicode title/body
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'text/html; charset=utf-8'}
Body: b'<html><head></head>
This page reloads every 0 seconds
Your browser tab is now stuck in an infinite reload loop.
</html>'
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 04:02:40 GMT'), ('Content-Type', 'text/html')]
Body: b'<html><head></head>
This page reloads every 0 seconds
Your browser tab is now stuck in an infinite reload loop.
</html>'
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'text/html'}
Body: b'<html><head></head>
This page reloads every 0 seconds
Your browser tab is now stuck in an infinite reload loop.
</html>'
[aiohttp]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'text/html'}
Body: b'<html><head></head>
This page reloads every 0 seconds
Your browser tab is now stuck in an infinite reload loop.
</html>'
--------------------------------------------
ENDPOINT: /ansi-chaos
TITLE: ANSI escape code nightmare
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'text/plain'}
Body: b'\x1b[2J\x1b[H\x1b]0;HACKED BY MALSERV\x07\x1b[?25l\x1b[2;92H\x1b[4;31m\xe2\x96\x93\x1b[0m\x1b[18;68H\x1b[3;32m\xe2\x99\xa5\x1b[0m\x1b[32;52H\x1b[4;34m\xf0\x9f\x92\x80\x1b[0m\x1b[41;8H\x1b[7;34m\xe2\x95\x90\x1b[0m\x1b[19;90H\x1b[1;36m\xe2\x96\x88\x1b[0m\x1b[6;97H\x1b[3;33m\xf0\x9f\x83\x8f\x1b[0m\x1b[28;11H\x1b[4;33m\xf0\x9f\x90\x9b\x1b[0m\x1b[13;51H\x1b[1;37m\xf0\x9f\x90\x9b\x1b[0m\x1b[12;33H\x1b[1;37m\xe2\x98\xa0\x1b[0m\x1b[37;110H\x1b[5;37m\xe2\x95\x97\x1b[0m\x1b[17;52H\x1b[3;34m\xe2\x95\x94\x1b[0m\x1b[6;11H\x1b[4;37m\xe2\x95\x9d\x1b[0m\x1b[5;114H\x1b[1;35m\xe2\x95\x91\x1b[0m\x1b[36;92H\x1b[1;36m\xe2\x96\x93\x1b[0m\x1b[28;39H\x1b[7;32m\xe2\x96\x91\x1b[0m\x1b[9;96H\x1b[7;37m\xe2\x95\x9a\x1b[0m\x1b[6;102H\x1b[4;33m\xe2\x9a\xa1\x1b[0m\x1b[16;65H\x1b[7;35m\xe2\x95\x9a\x1b[0m\x1b[17;84H\x1b[7;33m\xe2\x95\x9d\x1b[0m\x1b[1;41H\x1b[3;31m\xe2\x99\xa3\x1b[0m\x1b[36;15H\x1b[4;32m\xe2\x98\xa0\x1b[0m\x1b[25'... (6950 bytes total)
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 04:02:40 GMT'), ('Content-Type', 'text/plain')]
Body: b'\x1b[2J\x1b[H\x1b]0;HACKED BY MALSERV\x07\x1b[?25l\x1b[39;106H\x1b[7;32m\xf0\x9f\x92\x80\x1b[0m\x1b[4;120H\x1b[1;33m\xf0\x9f\x91\xbe\x1b[0m\x1b[44;18H\x1b[3;33m\xe2\x99\xa0\x1b[0m\x1b[10;63H\x1b[3;36m\xf0\x9f\x8e\xad\x1b[0m\x1b[36;58H\x1b[4;33m\xe2\x99\xa3\x1b[0m\x1b[29;59H\x1b[5;31m\xe2\x99\xa5\x1b[0m\x1b[7;113H\x1b[3;35m\xe2\x99\xa0\x1b[0m\x1b[45;14H\x1b[3;33m\xe2\x9a\xa1\x1b[0m\x1b[35;21H\x1b[4;37m\xf0\x9f\x94\xa5\x1b[0m\x1b[25;84H\x1b[3;34m\xf0\x9f\x92\x80\x1b[0m\x1b[23;114H\x1b[5;36m\xe2\x95\x9a\x1b[0m\x1b[47;28H\x1b[4;31m\xf0\x9f\x83\x8f\x1b[0m\x1b[17;35H\x1b[5;31m\xe2\x99\xa6\x1b[0m\x1b[48;42H\x1b[4;33m\xe2\x96\x93\x1b[0m\x1b[25;117H\x1b[3;33m\xf0\x9f\x94\xa5\x1b[0m\x1b[9;58H\x1b[1;32m\xe2\x96\x91\x1b[0m\x1b[22;90H\x1b[5;37m\xf0\x9f\x83\x8f\x1b[0m\x1b[33;54H\x1b[7;32m\xf0\x9f\x94\xa5\x1b[0m\x1b[32;111H\x1b[5;31m\xe2\x99\xa0\x1b[0m\x1b[19;46H\x1b[3;36m\xf0\x9f\x94\xa5\x1b[0m\x1b[39;75H\x1b[3;'... (6968 bytes total)
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'text/plain'}
Body: b'\x1b[2J\x1b[H\x1b]0;HACKED BY MALSERV\x07\x1b[?25l\x1b[24;101H\x1b[5;33m\xe2\x9a\xa1\x1b[0m\x1b[31;71H\x1b[1;34m\xe2\x96\x88\x1b[0m\x1b[24;117H\x1b[1;37m\xe2\x96\x88\x1b[0m\x1b[27;1H\x1b[3;33m\xe2\x9a\xa1\x1b[0m\x1b[38;31H\x1b[3;33m\xe2\x95\x97\x1b[0m\x1b[8;91H\x1b[5;33m\xe2\x9a\xa1\x1b[0m\x1b[44;104H\x1b[5;34m\xe2\x99\xa6\x1b[0m\x1b[38;118H\x1b[3;34m\xe2\x96\x93\x1b[0m\x1b[4;20H\x1b[1;37m\xf0\x9f\x83\x8f\x1b[0m\x1b[3;89H\x1b[4;37m\xf0\x9f\x90\x9b\x1b[0m\x1b[39;18H\x1b[3;34m\xf0\x9f\x91\xbe\x1b[0m\x1b[20;7H\x1b[4;32m\xf0\x9f\x94\xa5\x1b[0m\x1b[3;82H\x1b[5;34m\xe2\x96\x91\x1b[0m\x1b[21;104H\x1b[3;31m\xe2\x98\xa0\x1b[0m\x1b[23;30H\x1b[3;35m\xe2\x98\xa0\x1b[0m\x1b[6;19H\x1b[5;37m\xe2\x99\xa6\x1b[0m\x1b[44;91H\x1b[1;33m\xf0\x9f\x91\xbe\x1b[0m\x1b[30;24H\x1b[3;35m\xe2\x96\x92\x1b[0m\x1b[44;54H\x1b[4;35m\xf0\x9f\x92\x80\x1b[0m\x1b[34;21H\x1b[7;33m\xe2\x96\x88\x1b[0m\x1b[2;108H\x1b[4;37m\xe2\x96\x93\x1b[0'... (6962 bytes total)
[aiohttp]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'text/plain'}
Body: b'\x1b[2J\x1b[H\x1b]0;HACKED BY MALSERV\x07\x1b[?25l\x1b[30;63H\x1b[4;32m\xf0\x9f\x8e\xad\x1b[0m\x1b[1;50H\x1b[7;36m\xf0\x9f\x83\x8f\x1b[0m\x1b[21;17H\x1b[1;32m\xe2\x95\x9d\x1b[0m\x1b[34;95H\x1b[3;36m\xe2\x9a\xa1\x1b[0m\x1b[14;27H\x1b[3;37m\xe2\x95\x97\x1b[0m\x1b[37;78H\x1b[5;35m\xe2\x96\x92\x1b[0m\x1b[27;67H\x1b[5;37m\xe2\x96\x92\x1b[0m\x1b[2;51H\x1b[5;31m\xf0\x9f\x90\x9b\x1b[0m\x1b[35;34H\x1b[4;32m\xe2\x95\x90\x1b[0m\x1b[49;78H\x1b[3;35m\xe2\x99\xa5\x1b[0m\x1b[32;23H\x1b[5;33m\xf0\x9f\x94\xa5\x1b[0m\x1b[47;117H\x1b[7;32m\xe2\x96\x93\x1b[0m\x1b[38;117H\x1b[5;35m\xe2\x99\xa0\x1b[0m\x1b[30;63H\x1b[1;37m\xe2\x96\x92\x1b[0m\x1b[23;25H\x1b[4;37m\xe2\x99\xa6\x1b[0m\x1b[41;54H\x1b[7;34m\xe2\x95\x91\x1b[0m\x1b[20;114H\x1b[3;31m\xe2\x95\x94\x1b[0m\x1b[20;84H\x1b[3;33m\xe2\x95\x9a\x1b[0m\x1b[28;49H\x1b[3;32m\xf0\x9f\x94\xa5\x1b[0m\x1b[49;47H\x1b[3;37m\xe2\x98\xa0\x1b[0m\x1b[22;87H\x1b[7;35m\xe2\x99\xa6\x1b'... (6966 bytes total)
--------------------------------------------
ENDPOINT: /net-gzip-bomb
TITLE: Gzip bomb (~10KB to 10MB)
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'application/octet-stream', 'Content-Encoding': 'gzip', 'Content-Length': '9750'}
Body: b'\x1f\x8b\x08\x00\x19\xeb\x8fi\x02\xff\xec\xc1\x01\x01\x00\x00\x00\x80\x90\xfe\xaf\xee\x08\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'... (8192 bytes total)
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 04:02:40 GMT'), ('Content-Type', 'application/octet-stream'), ('Content-Encoding', 'gzip'), ('Content-Length', '9750')]
Body: b'\x1f\x8b\x08\x00\x19\xeb\x8fi\x02\xff\xec\xc1\x01\x01\x00\x00\x00\x80\x90\xfe\xaf\xee\x08\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'... (8192 bytes total)
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'application/octet-stream', 'Content-Encoding': 'gzip', 'Content-Length': '9750'}
Body: b'\x1f\x8b\x08\x00\x19\xeb\x8fi\x02\xff\xec\xc1\x01\x01\x00\x00\x00\x80\x90\xfe\xaf\xee\x08\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'... (8192 bytes total)
[aiohttp]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'application/octet-stream', 'Content-Encoding': 'gzip', 'Content-Length': '9750'}
Body: b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'... (8192 bytes total)
--------------------------------------------
ENDPOINT: /net-event-flood
TITLE: SSE event flood (infinite)
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache', 'Connection': 'keep-alive'}
Body: b'id: 0\nevent: flood\ndata: {"seq":0,"time":1771041760.932129,"garbage":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'... (8192 bytes total)
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 04:02:40 GMT'), ('Content-Type', 'text/event-stream'), ('Cache-Control', 'no-cache'), ('Connection', 'keep-alive')]
Body: b'id: 0\nevent: flood\ndata: {"seq":0,"time":1771041760.9326968,"garbage":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'... (8192 bytes total)
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache', 'Connection': 'keep-alive'}
Body: b'id: 0\nevent: flood\ndata: {"seq":0,"time":1771041760.933709,"garbage":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'... (8192 bytes total)
[aiohttp]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache', 'Connection': 'keep-alive'}
Body: b'id: 0\nevent: flood\ndata: {"seq":0,"time":1771041760.9344547,"garbage":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'... (8192 bytes total)
--------------------------------------------
ENDPOINT: /net-mime-sniff
TITLE: MIME type confusion
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'text/html'}
Body: b'<html><head></head>\n
MIME Sniffing Test
\n
This page includes a <script> tag pointing to /net-mime-sniff?payload=1,\nwhich serves JavaScript with Content-Type: image/jpeg.
\n
If your browser MIME-sniffs, the JS will execute and you\'ll see an alert.
\n
\n<script src="/net-mime-sniff?payload=1"></script>\n</html>'
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 04:02:40 GMT'), ('Content-Type', 'text/html')]
Body: b'<html><head></head>\n
MIME Sniffing Test
\n
This page includes a <script> tag pointing to /net-mime-sniff?payload=1,\nwhich serves JavaScript with Content-Type: image/jpeg.
\n
If your browser MIME-sniffs, the JS will execute and you\'ll see an alert.
\n
\n<script src="/net-mime-sniff?payload=1"></script>\n</html>'
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'text/html'}
Body: b'<html><head></head>\n
MIME Sniffing Test
\n
This page includes a <script> tag pointing to /net-mime-sniff?payload=1,\nwhich serves JavaScript with Content-Type: image/jpeg.
\n
If your browser MIME-sniffs, the JS will execute and you\'ll see an alert.
\n
\n<script src="/net-mime-sniff?payload=1"></script>\n</html>'
[aiohttp]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'text/html'}
Body: b'<html><head></head>\n
MIME Sniffing Test
\n
This page includes a <script> tag pointing to /net-mime-sniff?payload=1,\nwhich serves JavaScript with Content-Type: image/jpeg.
\n
If your browser MIME-sniffs, the JS will execute and you\'ll see an alert.
\n
\n<script src="/net-mime-sniff?payload=1"></script>\n</html>'
--------------------------------------------
ENDPOINT: /net-cache-poison
TITLE: Contradicting cache headers
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'text/html', 'Cache-Control': 'no-cache, max-age=999999, must-revalidate, public, private, no-store, immutable', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Pragma': 'no-cache', 'Last-Modified': 'Sun, ... (374 chars total)
Body: b'<html>
Which cache directive wins?
Every cache header contradicts every other. Good luck, proxy.
no-cache + max-age=999999 + must-revalidate + public + private + no-store + immutable
Expires in the past, Last-Modified in the future, Age is 31 years, Vary is wildcard, ETag is *
</html>'
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 04:02:40 GMT'), ('Content-Type', 'text/html'), ('Cache-Control', 'no-cache, max-age=999999, must-revalidate, public, private, no-store, immutable'), ('Expires', 'Thu, 01 Jan 1970 00:00:00 GMT'), ('Pragma', 'no-cache'), ('Last-Modi... (394 chars total)
Body: b'<html>
Which cache directive wins?
Every cache header contradicts every other. Good luck, proxy.
no-cache + max-age=999999 + must-revalidate + public + private + no-store + immutable
Expires in the past, Last-Modified in the future, Age is 31 years, Vary is wildcard, ETag is *
</html>'
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'text/html', 'Cache-Control': 'no-cache, max-age=999999, must-revalidate, public, private, no-store, immutable', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Pragma': 'no-cache', 'Last-Modified': 'Sun, ... (374 chars total)
Body: b'<html>
Which cache directive wins?
Every cache header contradicts every other. Good luck, proxy.
no-cache + max-age=999999 + must-revalidate + public + private + no-store + immutable
Expires in the past, Last-Modified in the future, Age is 31 years, Vary is wildcard, ETag is *
</html>'
[aiohttp]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'text/html', 'Cache-Control': 'no-cache, max-age=999999, must-revalidate, public, private, no-store, immutable', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Pragma': 'no-cache', 'Last-Modified': 'Sun, ... (374 chars total)
Body: b'<html>
Which cache directive wins?
Every cache header contradicts every other. Good luck, proxy.
no-cache + max-age=999999 + must-revalidate + public + private + no-store + immutable
Expires in the past, Last-Modified in the future, Age is 31 years, Vary is wildcard, ETag is *
</html>'
--------------------------------------------
ENDPOINT: /net-hsts-bomb
TITLE: HSTS with insane max-age
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'text/html', 'Strict-Transport-Security': 'max-age=999999999; includeSubDomains; preload'}
Body: b'<html>
HSTS Bomb
Your browser now thinks this site requires HTTPS for 31 years.
This header also applies to ALL subdomains and requests preload list inclusion.
To undo in Chrome: chrome://net-internals/#hsts
</html>'
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 04:02:40 GMT'), ('Content-Type', 'text/html'), ('Strict-Transport-Security', 'max-age=999999999; includeSubDomains; preload')]
Body: b'<html>
HSTS Bomb
Your browser now thinks this site requires HTTPS for 31 years.
This header also applies to ALL subdomains and requests preload list inclusion.
To undo in Chrome: chrome://net-internals/#hsts
</html>'
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'text/html', 'Strict-Transport-Security': 'max-age=999999999; includeSubDomains; preload'}
Body: b'<html>
HSTS Bomb
Your browser now thinks this site requires HTTPS for 31 years.
This header also applies to ALL subdomains and requests preload list inclusion.
To undo in Chrome: chrome://net-internals/#hsts
</html>'
[aiohttp]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'text/html', 'Strict-Transport-Security': 'max-age=999999999; includeSubDomains; preload'}
Body: b'<html>
HSTS Bomb
Your browser now thinks this site requires HTTPS for 31 years.
This header also applies to ALL subdomains and requests preload list inclusion.
To undo in Chrome: chrome://net-internals/#hsts
</html>'
--------------------------------------------
ENDPOINT: /misc-ipv4
TITLE: Shows your IPv4 address
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'text/html'}
Body: b'<html><head></head>
127.0.0.1
</html>'
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 04:02:40 GMT'), ('Content-Type', 'text/html')]
Body: b'<html><head></head>
127.0.0.1
</html>'
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'text/html'}
Body: b'<html><head></head>
127.0.0.1
</html>'
[aiohttp]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'text/html'}
Body: b'<html><head></head>
127.0.0.1
</html>'
--------------------------------------------
ENDPOINT: /misc-ipv6
TITLE: Shows your IPv6 address
[urllib.request]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'text/html'}
Body: b'<html><head></head>
127.0.0.1
For true IPv6, connect to [::1]:60666
</html>'
[http.client]
Status: 200 OK
Headers: [('Server', 'BaseHTTP/0.6 Python/3.12.3'), ('Date', 'Sat, 14 Feb 2026 04:02:40 GMT'), ('Content-Type', 'text/html')]
Body: b'<html><head></head>
127.0.0.1
For true IPv6, connect to [::1]:60666
</html>'
[requests]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'text/html'}
Body: b'<html><head></head>
127.0.0.1
For true IPv6, connect to [::1]:60666
</html>'
[aiohttp]
Status: 200
Headers: {'Server': 'BaseHTTP/0.6 Python/3.12.3', 'Date': 'Sat, 14 Feb 2026 04:02:40 GMT', 'Content-Type': 'text/html'}
Body: b'<html><head></head>
127.0.0.1
For true IPv6, connect to [::1]:60666
</html>'
--------------------------------------------
ALL TESTS COMPLETE
--------------------------------------------