67 lines
1.8 KiB
Python
67 lines
1.8 KiB
Python
#!/usr/bin/env python3
|
|
import http.server
|
|
import socketserver
|
|
import sys
|
|
import os
|
|
|
|
class CORSHTTPRequestHandler(http.server.SimpleHTTPRequestHandler):
|
|
def end_headers(self):
|
|
self.send_header('Access-Control-Allow-Origin', '*')
|
|
self.send_header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS')
|
|
self.send_header('Access-Control-Allow-Headers', '*')
|
|
self.send_header('Cache-Control', 'no-store, no-cache, must-revalidate')
|
|
self.send_header('Pragma', 'no-cache')
|
|
self.send_header('Expires', '0')
|
|
super().end_headers()
|
|
|
|
def do_OPTIONS(self):
|
|
self.send_response(200)
|
|
self.end_headers()
|
|
|
|
def log_message(self, format, *args):
|
|
pass
|
|
|
|
def handle_one_request(self):
|
|
try:
|
|
super().handle_one_request()
|
|
except ConnectionAbortedError:
|
|
pass
|
|
except:
|
|
pass
|
|
|
|
def get_local_ip():
|
|
import socket
|
|
try:
|
|
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
s.connect(('8.8.8.8', 80))
|
|
ip = s.getsockname()[0]
|
|
s.close()
|
|
return ip
|
|
except:
|
|
return '127.0.0.1'
|
|
|
|
def run_server(port=8000):
|
|
handler = CORSHTTPRequestHandler
|
|
|
|
with socketserver.TCPServer(("", port), handler) as httpd:
|
|
local_ip = get_local_ip()
|
|
|
|
print(f"服务器启动成功!")
|
|
print(f"本地访问: http://localhost:{port}")
|
|
print(f"局域网访问: http://{local_ip}:{port}")
|
|
print(f"按 Ctrl+C 停止服务器")
|
|
print("-" * 50)
|
|
|
|
try:
|
|
httpd.serve_forever()
|
|
except KeyboardInterrupt:
|
|
print("\n服务器已停止")
|
|
httpd.server_close()
|
|
|
|
if __name__ == "__main__":
|
|
if len(sys.argv) > 1:
|
|
port = int(sys.argv[1])
|
|
else:
|
|
port = 8000
|
|
|
|
run_server(port) |