Hãy xem xét ví dụ sau:Làm thế nào để phục vụ cho bất kỳ loại tập tin với BaseHTTPRequestHandler Python của
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()
gì nếu tôi muốn đến máy chủ trong một file ZIP cũng ... làm thế nào tôi sẽ làm điều đó? Tôi không nghĩ rằng dòng này sẽ hoạt động đúng không?
self.wfile.write(f.read())
Ai đó có thể giải thích tại sao cuộc gọi để mở() "có khả năng khiến mọi tệp trên máy tính của bạn có thể đọc được" không? Và làm thế nào bạn sẽ bảo vệ chống lại điều này để phục vụ các tập tin trong ví dụ này? – brooksbp
@brooksbp Tôi nghĩ rằng anh ấy có nghĩa là người dùng có thể nhập đường dẫn sẽ điều hướng đến một thư mục khác trên máy tính của bạn, ví dụ: đi lên một hoặc nhiều thư mục. Nhưng chỉ có thể truy cập các tệp html bằng cách sử dụng mã ở trên. – Anthony