Here is a simple HTTPS file server in Python 3 that implements the requirements you specified:

import http.server
import socketserver
import ssl

HOSTNAME = "0.0.0.0"
PORT = 8000
CERT_FILE = "server.pem"
KEY_FILE = "key.pem"
ALLOWED_CLIENT_IP = None

class CustomHandler(http.server.SimpleHTTPRequestHandler):
    def do_GET(self):
        if ALLOWED_CLIENT_IP and self.client_address[0] != ALLOWED_CLIENT_IP:
            self.send_error(403, "Forbidden", "You are not authorized to access this resource")
            return
        
        if self.path.endswith("/download"):
            ALLOWED_CLIENT_IP = self.client_address[0]
            super().do_GET()
        else:
            self.send_error(404, "Not Found", "The requested resource was not found on this server.")

with socketserver.TCPServer((HOSTNAME, PORT), CustomHandler) as httpd:
    httpd.socket = ssl.wrap_socket(httpd.socket, certfile=CERT_FILE, keyfile=KEY_FILE, server_side=True)
    print(f"Serving HTTPS on {HOSTNAME}:{PORT}")
    httpd.serve_forever()


In this code, we create a custom HTTP request handler CustomHandler that extends http.server.SimpleHTTPRequestHandler and overrides the do_GET method. This method checks if the incoming request is from an allowed client IP address (stored in ALLOWED_CLIENT_IP). If the incoming request is from a different IP address, it sends a "Forbidden" error.

If the request is from an allowed IP address, the code checks if the requested resource is the download endpoint. If it is, it updates ALLOWED_CLIENT_IP to the incoming IP address and calls the parent implementation of do_GET. This will serve the requested file once to the connecting IP address.

If the requested resource is not the download endpoint, the code sends a "Not Found" error.

The server uses SSL for secure communication, so you will need to generate your own SSL certificate and key. The certificate and key files should be stored in the same directory as the script and their filenames should be specified in the CERT_FILE and KEY_FILE variables, respectively.
นี่คือเซิร์ฟเวอร์ไฟล์ HTTPS แบบง่ายใน Python 3 ที่ใช้ข้อกำหนดที่คุณระบุ: import http.server import socketserver import ssl HOSTNAME = "0.0.0.0" PORT = 8000 CERT_FILE = "server.pem" KEY_FILE = "key.pem" ALLOWED_CLIENT_IP = ไม่มีคลาส CustomHandler(http.server.SimpleHTTPRequestHandler): def do_GET(self): if ALLOWED_CLIENT_IP และ self.client_address[0] != ALLOWED_CLIENT_IP: self.send_error(403, "Forbidden", "คุณไม่ได้รับอนุญาตให้เข้าถึงทรัพยากรนี้ ") ส่งคืนถ้า self.path.endswith("/download"): ALLOWED_CLIENT_IP = self.client_address[0] super().do_GET() else: self.send_error(404, "Not Found", "ไม่พบทรัพยากรที่ร้องขอ พบบนเซิร์ฟเวอร์นี้") โดยมี socketserver.TCPServer((HOSTNAME, PORT), CustomHandler) เป็น httpd: httpd.socket = ssl.wrap_socket(httpd.socket, certfile=CERT_FILE, keyfile=KEY_FILE, server_side=True) print(f "การให้บริการ HTTPS บน {HOSTNAME}:{PORT}") httpd.serve_forever() ในโค้ดนี้ เราสร้างตัวจัดการคำขอ HTTP แบบกำหนดเอง CustomHandler ที่ขยาย http.server.SimpleHTTPRequestHandler และแทนที่เมธอด do_GET วิธีการนี้จะตรวจสอบว่าคำขอที่เข้ามานั้นมาจากที่อยู่ IP ไคลเอ็นต์ที่ได้รับอนุญาต (เก็บไว้ใน ALLOWED_CLIENT_IP) หากคำขอขาเข้ามาจากที่อยู่ IP อื่น คำขอดังกล่าวจะส่งข้อผิดพลาด "ต้องห้าม" หากคำขอมาจากที่อยู่ IP ที่อนุญาต รหัสจะตรวจสอบว่าทรัพยากรที่ร้องขอเป็นจุดสิ้นสุดการดาวน์โหลดหรือไม่ หากเป็นเช่นนั้น ระบบจะอัปเดต ALLOWED_CLIENT_IP เป็นที่อยู่ IP ขาเข้าและเรียกการใช้งานหลักของ do_GET สิ่งนี้จะให้บริการไฟล์ที่ร้องขอหนึ่งครั้งไปยังที่อยู่ IP ที่เชื่อมต่อ หากทรัพยากรที่ร้องขอไม่ใช่จุดสิ้นสุดการดาวน์โหลด รหัสจะส่งข้อผิดพลาด "ไม่พบ" เซิร์ฟเวอร์ใช้ SSL เพื่อการสื่อสารที่ปลอดภัย ดังนั้นคุณจะต้องสร้างใบรับรอง SSL และคีย์ของคุณเอง ไฟล์ใบรับรองและคีย์ควรเก็บไว้ในไดเรกทอรีเดียวกันกับสคริปต์ และควรระบุชื่อไฟล์ในตัวแปร CERT_FILE และ KEY_FILE ตามลำดับ
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence