我正在尝试使用CGIHTTPServer运行一些Python CGI脚本。这工作正常,但现在我想在Web侦听器上使用SSL运行。
我从Activestate code recipes开始使用解决方案,并将SimpleHTTPRequestHandler更改为CGIHTTPRequestHandler。这可以很好地提供静态文件,包括cgi脚本(cgi-bin目前是指向“。”的链接)但是对于cgi脚本,Firefox显示
“SSL收到超过最大允许长度的记录”
错误代码:ssl_error_rx_record_too_long。
网络搜索表明这可能是服务器问题,而不是浏览器,这对我来说似乎是合乎逻辑的。此外,我已尝试了所有建议的浏览器设置。我也尝试了各种服务器设置,但没有快乐。
import ssl
”,因为它不可用代码:
import socket, sys
import SocketServer
import BaseHTTPServer
import CGIHTTPServer
from OpenSSL import SSL
class SecureHTTPServer(BaseHTTPServer.HTTPServer):
def __init__(self, server_address, HandlerClass):
self.allow_reuse_address = True
SockeServer.BaseServer.__init__(self, server_address, HandlerClass)
ctx = SSL.Context(SSL.SSLv23_METHOD)
ctx.use_privatekey_file ("path/key.pem")
ctx.use_certificate_file("path/cert.pem")
self.socket = SSL.Connection(ctx, socket.socket(self.address_family, self.socket_type))
self.server_bind()
self.server_activate()
class SecureHTTPRequestHandler(CGIHTTPServer.CGIHTTPRequestHandler):
def setup(self):
self.cgi_directories= ['cgi-bin']
self.connection = self.request
self.rfile = socket._fileobject(self.request, "rb", self.rbufsize)
self.wfile = socket._fileobject(self.request, "wb", self.wbufsize)
def test(HandlerClass = SecureHTTPRequestHandler, ServerClass = SecureHTTPServer):
httpd = ServerClass(('0.0.0.0',4443), HandlerClass)
sa = httpd.socket.getsockname()
print "Serving HTTPS on", sa[0], "port", sa[1], "..."
httpd.serve_forever()
if __name__ == '__main__':
test()
我怎样才能在Python 2.4中使用快速简便的Web界面?
答案 0 :(得分:0)
使用Apache httpd使用现有的Python CGI脚本来获取SSL。我仍然想知道如何使用CGIHTTPServer类,但