【问题标题】:Python SSL server gives me "501 Unsupported method GET"Python SSL 服务器给了我“501 Unsupported method GET”
【发布时间】:2017-02-23 05:09:07
【问题描述】:

我已经关注this link 用 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.pemcert.pem 文件路径很酷,我可以使用python server.py 启动服务器。我被要求输入密码,输入它,然后它冻结了一会儿,然后它似乎运行了。

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

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

【问题讨论】:

  • 该链接包含不合法的代码,用于 python3。您想要的是 SimpleHTTPRequestHandler 并且您尝试使用 BaseHTTPRequestHandler,所以这可能是一篇虚假文章,并不像作者声称的那么简单。尝试使其工作,但它不适用于链接后的 python 2 或 3。自己动手做!

标签: python python-3.x simplehttpserver


【解决方案1】:

来自docs

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

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

尝试改用SimpleHTTPRequestHandler,例如,

httpd = socketserver.TCPServer(('localhost', 4443), SimpleHTTPRequestHandler)

【讨论】:

    猜你喜欢
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    相关资源
    最近更新 更多