Задать вопрос
@A2ROKirill

Как отправить http статус кода в ответ на сообщение?

Добрый день! Пишу http сервер для получения уведомлений от yandex kassa .Есть базовый код для создания простейшего http сервера. По документации yandex в ответ я должен отправить ответ ОК 200 . Подскажите пожалуйста как мне это сделать

import http.server
import socketserver
from http import HTTPStatus
port = 8080
Handler = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(("", port), Handler) as httpd:
print("serving at port", port)
httpd.serve_forever()

Это то что мне сейчас приходит в ответ . Тут какая то непонятная кодировка не могу раскодировать.

77.75.154.203 - - [23/Jul/2019 08:54:18] code 400, message Bad HTTP/0.9 request type ('\x16\x03\x03\x00ç\x01\x00\x00ã\x03\x03]6¡')
77.75.154.203 - - [23/Jul/2019 08:54:18] " ç ã]6¡ Bhp§ÜæÉÎ$Èn¦ïþ¾¢ËÏ>ø dÀ$À( =À&À* k jÀ" 400 -
77.75.154.203 - - [23/Jul/2019 08:54:28] code 400, message Bad HTTP/0.9 request type ('\x16\x03\x03\x00ç\x01\x00\x00ã\x03\x03]6¡\x13è]u\x11AÞíسbÀSÉÕ')
77.75.154.203 - - [23/Jul/2019 08:54:28] " ç ã]6¡è]uAÞíسbÀSÉՠׯCý[wº÷ñ" 400 -
77.75.153.77 - - [23/Jul/2019 08:55:10] code 400, message Bad HTTP/0.9 request type ('\x16\x03\x03\x00ç\x01\x00\x00ã\x03\x03]6¡=òâa\x9cv\x04h)/\x8eý2\x02\x04¸-\x8a\x92\x8dØÊì')
77.75.153.77 - - [23/Jul/2019 08:55:10] " ç ã]6¡=òâavh)/ý2¸-ØÊì þ8è) dÀ$À( =À&À* k jÀ" 400 -
77.75.154.204 - - [23/Jul/2019 08:56:34] code 400, message Bad request version ('v\x00\x00dÀ$À(\x00=À&À*\x00k\x00jÀ')
77.75.154.204 - - [23/Jul/2019 08:56:34] " ç ã]6¡Û¦yúFKÿ|xOU>'oÍMñv dÀ$À( =À&À* k jÀ" 400 -
77.75.153.77 - - [23/Jul/2019 08:59:23] code 400, message Bad HTTP/0.9 request type ('\x16\x03\x03\x00ç\x01\x00\x00ã\x03\x03]6¢:Áº\x87\x01ÉA-ê\x8a¢øôA¡çý\xad\xadÅÿ\x80O\x90\x8d«')
77.75.153.77 - - [23/Jul/2019 08:59:23] " ç ã]6¢:ÁºÉA-ê¢øôA¡çý­­ÅÿO«¥ dÀ$À( =À&À* k jÀ" 400 -
187.74.85.85 - - [23/Jul/2019 09:06:39] "GET / HTTP/1.1" 200 -
77.75.154.204 - - [23/Jul/2019 09:10:36] code 400, message Bad request syntax ("\x16\x03\x03\x00ç\x01\x00\x00ã\x03\x03]6¤ÚÔª\x91{VËv\x93\x10°w\x9eX\x06H|ÁÀ8~À\x02¦'\x81àhê\x00\x00dÀ$À(\x00=À&À*\x00k\x00jÀ")
77.75.154.204 - - [23/Jul/2019 09:10:36] " ç ã]6¤ÚÔª{VËv°wXH|ÁÀ8~À¦'àhê dÀ$À( =À&À* k jÀ" 400 -
  • Вопрос задан
  • 255 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 3
@Taus
Сервера yandex пытаются установить защищённое TLS v1.2 соединение по https. Об этом явно указано в документации. Либо вам нужно настроить поддержку SSL-соединений для http.server с самоподписанными сертификатом, либо воспользоваться готовыми решениями.
Ответ написан
Комментировать
alternativshik
@alternativshik
Зачем этот гемор? Почему не взять готовое решение - тот же фласк или джангу?
Ответ написан
@Kapustlo
Taus уже упомянул одну особенность Yandex API, полагаю, что он всё сказал верно, но я дам ответ на конкретно ваш запрос. Вам нужно создать свой класс обработчика запросов, который будет наследовать от "SimpleHTTPRequestHandler", в котором вы переопределите метод "do_GET" (или другой, который вам нужен, в зависимости от типа запроса) и вернёте нужные данные.

import http.server
import socketserver
from http import HTTPStatus

class HTTPRequestHandler(http.server.SimpleHTTPRequestHandler):
    def do_GET(self):
        encoding = "utf-8"
        self.send_response(200)
        self.end_headers()
        self.wfile.write("Your response".encode(encoding))

port = 8080 

Hander = HTTPRequestHandler()

with socketserver.TCPServer(("", port), Handler) as httpd:
print("serving at port", port)
httpd.serve_forever()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы