Python SSL 服务器给了我“501 Unsupported method GET”

Tom*_*uer 7 python simplehttpserver python-3.x

我已经按照此链接构建了一个带有 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()
Run Code Online (Sandbox Code Playgroud)

我创建了一个证书成功,key.pemcert.pem文件路径都很酷,我可以使用启动服务器python server.py。我被要求输入密码,输入它,然后它冻结了一会儿,然后它似乎运行。

但是,当我输入一些 URL 时,例如https://localhost:4443/index.html我得到500 Unsupported method GET。错误代码解释:HTTPStatus.NOT_IMPLEMENTED - 服务器不支持此操作。我需要做更多的事情来让我的服务器为当前目录提供服务吗?到目前为止,我刚刚使用过python -m http.server 8000SimpleHTTPServer在 Mac 上时)。我使用的是 Python 3。

这是一个将保持本地状态所以不要担心PEM文件和服务器脚本通过它暴露(如果它有效!)。我也同意证书不受信任并指示 Chrome 无论如何访问该页面。我只需要它来允许我访问相机,而不必将我的应用程序部署到具有合法证书的某个地方。

Ave*_*ery 10

文档

类 http.server.BaseHTTPRequestHandler(request, client_address, server)

该类用于处理到达服务器的 HTTP 请求。它本身无法响应任何实际的 HTTP 请求;它必须被子类化以处理每个请求方法(例如 GET 或 POST)。

尝试使用SimpleHTTPRequestHandler代替,例如,

httpd = socketserver.TCPServer(('localhost', 4443), SimpleHTTPRequestHandler)
Run Code Online (Sandbox Code Playgroud)