12

考虑以下示例:

import string,cgi,time
from os import curdir, sep
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer

class MyHandler(BaseHTTPRequestHandler):

    def do_GET(self):
        try:
            if self.path.endswith(".html"):
                f = open(curdir + sep + self.path) #self.path has /test.html
#note that this potentially makes every file on your computer readable by the internet

                self.send_response(200)
                self.send_header('Content-type',    'text/html')
                self.end_headers()
                self.wfile.write(f.read())
                f.close()
                return

        except IOError:
            self.send_error(404,'File Not Found: %s' % self.path)


def main():
    try:
        server = HTTPServer(('', 80), MyHandler)
        print 'started httpserver...'
        server.serve_forever()
    except KeyboardInterrupt:
        print '^C received, shutting down server'
        server.socket.close()

if __name__ == '__main__':
    main()

如果我还想提供一个 ZIP 文件怎么办……我该怎么做?我不认为这条线会起作用吗?

self.wfile.write(f.read())
4

3 回答 3

10

将二进制作为参数传递给 open()。这:

f = open(curdir + sep + self.path, 'rb')

而不是这个:

f = open(curdir + sep + self.path)

UNIX 不区分二进制和文本,但 windows 可以。但是如果脚本在 UNIX 上执行,“b”将被忽略,这样你就安全了。

于 2009-07-07T19:18:14.533 回答
4

你的线路会工作得很好。问题将是Content-type适当地设置。您想将其设置为application/zip而不是text/html.

于 2009-07-07T19:12:48.040 回答
3

如果您想在任何类型的文件夹中共享文件,那么您也可以尝试输入命令

python -m SimpleHTTPServer

这将在端口 8000 启动服务器,您可以浏览文件(通过目录列表)

于 2011-07-23T05:30:22.430 回答