如何从python http Web服务器发送html字符串?

我从http://www.linuxjournal.com/content/tech-tip-really-simple-http-server-python找到了一个python http web服务器

import sys
import BaseHTTPServer
from SimpleHTTPServer import SimpleHTTPRequestHandler


HandlerClass = SimpleHTTPRequestHandler
ServerClass  = BaseHTTPServer.HTTPServer
Protocol     = "HTTP/1.0"

if sys.argv[1:]:
    port = int(sys.argv[1])
else:
    port = 8000
server_address = ('127.0.0.1', port)

HandlerClass.protocol_version = Protocol
httpd = ServerClass(server_address, HandlerClass)

sa = httpd.socket.getsockname()
print "Serving HTTP on", sa[0], "port", sa[1], "..."
httpd.serve_forever()

如果目录中有一个名为index.html的文件,则该文件将用作初始文件.如果没有index.html,则会列出目录中的文件.

如何修改脚本,以便将自定义html发送到浏览器?

解决方法:

顾名思义,其名称表明文档,SimpleHTTPServer非常简单,旨在用作在标准库的框架之上构建自己的服务器的示例代码.

因此,如果您想对其进行任何操作,则可能要复制并修改the source,或者仅将其用作灵感.

而且,如果您想做任何严肃的事情,您可能想使用为编写真实的HTTP服务器(例如tornadotwisted)而设计的框架,或者仅使用现有的HTTP服务器并通过例如WSGI将动态页面委托给Python.

但是,如果您真的想这样做,可以.没有什么可以阻止您继承SimpleHTTPServer.SimpleHTTPRequestHandler并覆盖其方法.例如:

class MyHandler(SimpleHTTPRequestHandler):
    def send_head(self):
        if self.translate_path(self.path).endswith('/foo'):
            body = gaping_security_hole(self.path)
            self.send_response(200)
            self.send_header("Content-type", "text/html; charset=utf-8")
            self.send_header("Content-Length", str(len(body)))
            self.end_headers()
            return StringIO(body)
        else:
            return super(MyHandler, self).send_head()

显然,您可以在此处查看所需的内容,而不用使用endswith(‘/ foo’).例如,从the source中可以看到,默认实现在执行之前检查os.path.isdir,如果为true,则检查其是否结尾为(‘/’),以及目录中是否包含任何名为index.html或index.htm的内容.决定要做什么.

上一篇:python-SimpleHTTPServer和SocketServer


下一篇:python – 在简单的HTTP服务器上启用访问控制