#python #python-3.x #simplehttpserver
#python #python-3.x #simplehttpserver
Вопрос:
Я перешел по этой ссылке, чтобы создать простой файловый сервер с SSL.
from http.server import HTTPServer, BaseHTTPRequestHandler
import ssl
httpd = HTTPServer(('localhost', 4443), BaseHTTPRequestHandler)
# openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365
httpd.socket = ssl.wrap_socket (httpd.socket, keyfile="key.pem", certfile='cert.pem', server_side=True)
httpd.serve_forever()
Я успешно создал сертификат, key.pem
и cert.pem
пути к файлам указаны, и я могу запустить сервер с помощью python server.py
. Меня просят ввести пароль, вводят его, затем он на некоторое время зависает, а затем, кажется, запускается.
Однако, когда я ввожу какой-либо URL, например, https://localhost:4443/index.html
я получаю 500 неподдерживаемых методов GET. Объяснение кода ошибки: HttpStatus.NOT_IMPLEMENTED — сервер не поддерживает эту операцию.Нужно ли мне сделать что-то еще, чтобы мой сервер обслуживал текущий каталог? До сих пор я только что использовал python -m http.server 8000
( SimpleHTTPServer
когда на Mac.) Я использую Python 3.
Это будет оставаться локальным, поэтому не беспокойтесь о PEM
том, что файлы и серверный скрипт будут доступны через него (если это сработает!). Я также согласен с ненадежным сертификатом и дал указание Chrome посетить страницу в любом случае. Мне это просто нужно, чтобы я мог получить доступ к camera без необходимости развертывания моего приложения где-либо с законным сертификатом.
Комментарии:
1. Ссылка содержит код, который не является законным для python3. То, что вам нужно, это SimpleHTTPRequestHandler, и вы пытаетесь использовать BaseHTTPRequestHandler, так что, возможно, это фиктивная статья, и не так просто, как утверждает автор. Попробовал заставить это работать, но это не сработало для python 2 или 3, следуя ссылке. СДЕЛАЙ сам!
Ответ №1:
Из документов:
класс http.server.BaseHTTPRequestHandler(запрос, client_address, сервер)
Этот класс используется для обработки HTTP-запросов, поступающих на сервер. Сам по себе он не может отвечать на какие-либо фактические HTTP-запросы; он должен быть подклассом для обработки каждого метода запроса (например, GET или POST).
Попробуйте вместо этого использовать SimpleHTTPRequestHandler, например,
httpd = socketserver.TCPServer(('localhost', 4443), SimpleHTTPRequestHandler)