В вашем запросе прямо сказано, что вы готовы принять сжатый ответ:
Accept-Encoding: gzip, deflate\r
И, следовательно, это то, что вы получите в ответе
Content-Encoding: gzip
Итак, телосжатый с помощью gzip (который объясняет искаженный вывод), и вам нужно будет распаковать его.Учитывая, что вы в настоящее время, похоже, не можете правильно обрабатывать сжатые ответы, вы не должны указывать в своем запросе, что вы поддерживаете их, то есть удалить Accept-Encoding
.
Кроме этого, скорее всего, неправильно сВаш запрос:
body = "hash="+md5
...
Content-Length: 32\r
...
payload = headers + body
...
Учитывая, что md5 - это шестнадцатеричное (или 16-байтовое) двоичное число из 32 символов, body
, состоящий из "hash"=+md5
, вероятно, не имеет длину 32 символа, как вы заявляете в своем Content-Length
.
POST / HTTP/1.1\r
Кроме того, вы отправляете запрос HTTP / 1.1, чтобы иметь возможность обрабатывать фрагментированные ответы, но ваш код не обрабатывает их.
res = s.recv(4096)
Аналогично, ваш код вслепую предполагает, что полный ответ может быть получен в течение одного recv
, что не обязательно должно иметь место.
В итоге: если у вас нет более глубокогоДля понимания того, как работает HTTP (чего у вас, похоже, нет), рекомендуется использовать существующие библиотеки для обработки HTTP для вас, поскольку они были написаны разработчиками, которые понимают HTTP.
И даже если у вас уже есть понимание HTTP, вы, вероятно, все равно будете использовать эти библиотеки, так как будете знать, что HTTP далеко не тривиален и что нет смысла самостоятельно реализовывать все необходимые детали и крайние случаив вашем коде, если что-то надежное уже существует.