2026-04-21 11:05:14 +03:00
|
|
|
__author__ = 'RemiZOffAlex'
|
|
|
|
|
__email__ = 'remizoffalex@mail.ru'
|
|
|
|
|
|
|
|
|
|
import unittest
|
|
|
|
|
|
2026-04-21 11:20:30 +03:00
|
|
|
from nucleus.domains.http.parsers.request import parse, urlsplit
|
2026-04-21 11:05:14 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestRequestParse(unittest.TestCase):
|
|
|
|
|
def test_parse_1(self):
|
2026-04-22 06:24:03 +03:00
|
|
|
raw = b'GET /page?id=1 HTTP/1.1\r\nHost: 10.2.0.1:5000\r\nConnection: keep-alive\r\nDNT: 1\r\nUpgrade-Insecure-Requests: 1\r\nUser-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7\r\nAccept-Encoding: gzip, deflate\r\nAccept-Language: ru,en-US;q=0.9,en;q=0.8\r\n\r\n'
|
2026-04-21 11:05:14 +03:00
|
|
|
request = parse(raw)
|
|
|
|
|
for key in request.__dict__:
|
|
|
|
|
print(key, getattr(request, key))
|
|
|
|
|
|
|
|
|
|
self.assertTrue(request.method=='GET')
|
|
|
|
|
self.assertTrue(request.url=='/page?id=1')
|
|
|
|
|
self.assertTrue(request.path=='/page')
|
|
|
|
|
self.assertTrue(request.protocol=='HTTP/1.1')
|
|
|
|
|
|
|
|
|
|
headers = request.headers
|
|
|
|
|
self.assertTrue(headers['Host']=='10.2.0.1:5000')
|
|
|
|
|
self.assertTrue(headers['Connection']=='keep-alive')
|
|
|
|
|
self.assertTrue(headers['User-Agent']=='Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36')
|
|
|
|
|
self.assertTrue(headers['Accept']=='text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7')
|
|
|
|
|
self.assertTrue(headers['Accept-Encoding']=='gzip, deflate')
|
|
|
|
|
self.assertTrue(headers['Accept-Language']=='ru,en-US;q=0.9,en;q=0.8')
|
2026-04-21 11:20:30 +03:00
|
|
|
|
|
|
|
|
def test_urlsplit(self):
|
|
|
|
|
raw = 'https://user:pass@example.com:8080/path/page?name=John&age=30#section'
|
|
|
|
|
url = urlsplit(raw)
|
|
|
|
|
print(url)
|
2026-04-22 06:24:03 +03:00
|
|
|
|
|
|
|
|
def test_parse_post_json(self):
|
2026-04-22 11:47:41 +03:00
|
|
|
raw = b'POST /api HTTP/1.1\r\nHost: 10.2.0.1:9000\r\nUser-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:149.0) Gecko/20100101 Firefox/149.0\r\nContent-Length: 276\r\nAccept: application/json, text/*\r\nAccept-Encoding: gzip, deflate\r\nAccept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7\r\nCache-Control: no-cache\r\nContent-Type: application/json; charset=utf-8\r\nOrigin: http://10.2.0.1:9000\r\nPragma: no-cache\r\nReferer: http://10.2.0.1:9000/questions\r\nX-Forwarded-For: 192.18.3.1\r\nX-Forwarded-Host: 10.2.0.1:9000\r\nX-Forwarded-Port: 9000\r\nX-Forwarded-Proto: http\r\nX-Forwarded-Server: 8dd1deb61302\r\nX-Real-Ip: 192.18.3.1\r\n\r\n[{"jsonrpc":"2.0","method":"questions","params":{"page":1,"order_by":{"field":"id","order":"desc"},"fields":["id","title","created","updated",{"tags":["id","name"],"user":["id","name"]}]},"id":"6759189805cce"},{"jsonrpc":"2.0","method":"questions.count","id":"821f0655b5d4d"}]'
|
2026-04-22 06:24:03 +03:00
|
|
|
request = parse(raw)
|
|
|
|
|
|
|
|
|
|
self.assertTrue(request.is_json)
|
|
|
|
|
data = request.json
|
|
|
|
|
if isinstance(data, list):
|
|
|
|
|
self.assertIsInstance(data, list)
|
|
|
|
|
elif isinstance(data, dict):
|
|
|
|
|
self.assertIsInstance(dict)
|
2026-04-23 08:49:42 +03:00
|
|
|
|
|
|
|
|
def test_parse_cookie(self):
|
|
|
|
|
raw = b'POST /api HTTP/1.1\r\nHost: 10.2.0.1:9000\r\nUser-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36\r\nContent-Length: 277\r\nAccept: application/json, text/*\r\nAccept-Language: ru,en-US;q=0.9,en;q=0.8\r\nContent-Type: application/json; charset=UTF-8\r\nCookie: specialistoff_net=qwe.123.asd; session=qwe.123.asd\r\nX-Forwarded-For: 192.18.3.1\r\nX-Forwarded-Host: 10.2.0.1:9000\r\nX-Forwarded-Port: 9000\r\nX-Forwarded-Proto: http\r\nX-Forwarded-Server: 8dd1deb61302\r\nX-Real-Ip: 192.18.3.1\r\nAccept-Encoding: gzip\r\n\r\n[{"jsonrpc":"2.0","method":"questions","params":{"page":1,"order_by":{"field":"id","order":"desc"},"fields":["id","title","created","updated",{"tags":["id","name"],"user":["id","name"]}]},"id":"1099d48b231bb"},{"jsonrpc":"2.0","method":"questions.count","id":"41dbfec0441e68"}]'
|
|
|
|
|
request = parse(raw)
|
|
|
|
|
|
|
|
|
|
self.assertIsInstance(request.cookies, dict)
|
|
|
|
|
print(request.cookies)
|
|
|
|
|
# self.assertIsInstance(request.cookies, dict)
|