
from http.server import BaseHTTPRequestHandler, HTTPServer
import logging

class RequestHandler(BaseHTTPRequestHandler):
    """一个简单的请求处理器，用于记录请求的详细信息。"""

    def _log_request_details(self):
        """记录请求方法、路径、头部和正文。"""
        logging.info(f"\n----- 新的请求已接收 -----")
        logging.info(f"请求来源: {self.client_address[0]}")
        logging.info(f"请求方法: {self.command}")
        logging.info(f"请求路径: {self.path}")
        
        logging.info("\n[请求头信息]:")
        for header, value in self.headers.items():
            logging.info(f"  {header}: {value}")
        
        content_length = int(self.headers.get('Content-Length', 0))
        if content_length > 0:
            post_data = self.rfile.read(content_length)
            logging.info("\n[请求正文 (Body)]:")
            try:
                # 尝试以UTF-8解码并打印
                logging.info(post_data.decode('utf-8'))
            except UnicodeDecodeError:
                # 如果解码失败，直接打印原始数据
                logging.info(post_data)
        else:
            logging.info("\n[请求正文 (Body)]: (无)")
        logging.info("----- 请求结束 -----\n")

    def do_POST(self):
        """处理POST请求。"""
        self._log_request_details()
        # 发送一个简单的成功响应
        self.send_response(200)
        self.send_header('Content-type', 'application/json')
        self.send_header('Access-Control-Allow-Origin', '*') # 允许跨域
        self.end_headers()
        self.wfile.write(b'{"status": "ok"}')

    def do_GET(self):
        """处理GET请求。"""
        self._log_request_details()
        # 发送一个简单的成功响应
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.send_header('Access-Control-Allow-Origin', '*') # 允许跨域
        self.end_headers()
        self.wfile.write(b'<h1>Local VPS is running.</h1>')

    def do_OPTIONS(self):
        """处理浏览器的预检请求(CORS)。"""
        self.send_response(204)
        self.send_header('Access-Control-Allow-Origin', '*')
        self.send_header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS')
        self.send_header('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type')
        self.end_headers()

def run(server_class=HTTPServer, handler_class=RequestHandler, port=10000):
    """启动服务器。"""
    logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(message)s')
    server_address = ('', port) # 监听所有网络接口
    httpd = server_class(server_address, handler_class)
    
    # 获取本机局域网IP地址用于提示
    try:
        import socket
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(("8.8.8.8", 80))
        local_ip = s.getsockname()[0]
        s.close()
        logging.info(f"[✅] 本地VPS服务器已启动，正在监听 http://{local_ip}:{port}")
        logging.info(f"     同时也在 http://127.0.0.1:{port} 上监听")
    except Exception:
        logging.info(f"[✅] 本地VPS服务器已启动，正在监听所有接口于端口 {port}")
        logging.info("     请手动将您电脑的局域网IP地址填入 src.html 文件中。")

    logging.info("     按 Ctrl+C 停止服务器。")
    httpd.serve_forever()

if __name__ == '__main__':
    run()

