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

时间:2013-04-04 19:06:38

标签: python simplehttpserver

我从http://www.linuxjournal.com/content/tech-tip-really-simple-http-server-python

找到了一个python http网络服务器
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发送到浏览器?

1 个答案:

答案 0 :(得分:4)

正如名称和文档所暗示的那样,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,如果是,则检查它是否endswith('/'),以及目录是否有任何名为index.html的内容或index.htm,在决定做什么之前。