Проблема
Я работаю на базовом прокси-сервере с сокетами Python3.Это работает, но не так, как должно работать.Заголовки ответа в порядке, а тело нет.Как показано ниже, тело ответа выглядит странно: «Всего байтов» x1f \ x8b \ x08 \ x00 \ x00 ... и т. Д. », Но при перенаправлении в браузер оно отображается правильно.
Полученный ответ с сокетом
b"HTTP/1.1 200 OK
Vary: Accept-Encoding\r\n
Content-Encoding: gzip\r\n
Content-Length: 156\r\n
Keep-Alive: timeout=5, max=100\r\n
Connection: Keep-Alive\r\n
Content-Type: text/html\r\n\
r\n\
x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03-\x8e\xcb\x0e\x83 \x14D\xf7|\x05\xb2.\xd5e\xa3\xe8\xda?p\x8d@\x81\xf4\xea5p\xfb\xf0\xef\x8b\xc6\xd5$'\x939\x03h4\x04\xcc\xa4\x02-00\x15\x9c\xb6%(\x12\xb8\x81\x8d\x0e\x00o|\xc2\x04\xb6b\xaa\xbe\xb0\xaa\xaf\xda\x8cv\xe7\xb37\x08\x98z1\x836/Q\xb0\x8d\x1f\x9ei\x07\xd7\x8bE'\x1f\xd7V\xbf\t\xbbo\xb4\x14\xdaG\xd3l\xbf\xae\xd4\xc6\xc8T%\xa5\x8a\x8b\xe79\x99^\x84\xe7}[\xbd\x18\xa4<\x14e\xe4\x88Cq\x1a\xcf\x7f\x7f\x10\x07P@\xb0\x00\x00\x00"
Код ответа:
def receive(sock):
sock.settimeout(3)
data=b""
try:
while 1:
rcvd=sock.recv(4096)
if not rcvd:
break
data+=rcvd
except:
pass
return data
Затем я использовал Burp Suite
, чтобы получить тот же ответ, и тело ответа было нормальным.
Тот же ответ с отрыжкой
HTTP/1.1 200 OK
Vary: Accept-Encoding
Content-Length: 176
Connection: close
Content-Type: text/html
localhost<html>
<head>
<title>
Hello, World!
</title>
</head>
<body bgcolor="black">
<div style="margin:auto;width:800px;">
Hi
</div>
</body>
</html>
Эта проблема возникает с localhost
сайтов, если они существуют, но если запрошенный сайт не существует 404 not found
Ответ нормальный и имеет четкое и нормальное тело.
Итак, я хочу выяснить, в чем проблема и как ее исправить.