Тем не менее, для очень скромного личного проекта я реализовал свой собственный класс, производный от http.server.BaseHTTPRequestHandler, в котором я переопределил метод do_GET. Все работало правильно, пока я не обновил версию Python до 3.12: кажется, эта версия также внесла некоторые изменения в модуль ssl, поэтому мне пришлось немного реорганизовать код.
В этом отношении это сжатое содержимое файла main.py:
Код: Выделить всё
# ...here are import statements and other functions...
class RequestHandler(BaseHTTPRequestHandler):
# ...here the other methods are defined...
def do_GET(self):
resobj = self._manage_get_request()
self.send_response(resobj.status_code)
self._send_headers(resobj.headers)
self._send_body(resobj.body)
def main():
print('Running http server...')
address = (_HTTP_SERV_ADDR, _HTTP_SERV_PORT)
httpd = HTTPServer(address, RequestHandler)
if not _DEBUG_ENABLED:
print('Enabling TLS protocol...')
context = _ssl.SSLContext(_ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain(certfile=_CERTIFICATE_FILE_PATH,
keyfile=_KEY_FILE_PATH)
httpd.socket = context.wrap_socket(httpd.socket, server_side=True)
print(f'Server is listening ({httpd.server_address[0]}:{httpd.server_port})...')
try:
httpd.serve_forever()
except KeyboardInterrupt:
pass
print('Shutting down http server...')
httpd.server_close()
Не мог бы кто-нибудь из вас предоставить мне что-нибудь подскажет, что проверить, чтобы лучше понять, что происходит и почему?
Дополнительная информация по реализации
Хотя send_response уже определен в BaseHTTPRequestHandler, остальные методы, вызываемые в do_GET, определены в моей реализации. В частности:
- — это своего рода оператор if для правильного управления запросом с учетом параметров, предоставленных через запрос; он возвращает пользовательский объект Response с кодом, заголовками и телом
Код: Выделить всё
_manage_get_request - по сути является оболочкой метода send_header родительского класса
Код: Выделить всё
_send_headers - просто записывает тело ответа в буфер сокета
Код: Выделить всё
_send_body
Подробнее здесь: https://stackoverflow.com/questions/793 ... n-https-is
Мобильная версия