考虑以下示例:
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())
答案 0 :(得分:8)
将二进制文件作为参数传递给open()。这样:
f = open(curdir + sep + self.path, 'rb')
而不是:
f = open(curdir + sep + self.path)
UNIX不区分二进制文本和文本,但是Windows确实如此。但是如果脚本在UNIX上执行,那么“b”将被忽略,因此你是安全的。
答案 1 :(得分:4)
你的生产线会运转得很好。问题是适当地设置Content-type
。您需要将其设置为application/zip
而不是text/html
。
答案 2 :(得分:4)
如果您想共享任何类型的文件夹中的文件,您也可以尝试输入命令
python -m SimpleHTTPServer
这将在端口8000启动服务器,您可以浏览文件(通过目录列表)