แปลงรายการ IPv4 ip:port:user:password สำหรับ Requests
แยกวิเคราะห์ ip:port:user:password ด้วยการแบ่งแบบจำกัด และเข้ารหัสองค์ประกอบข้อมูลรับรองก่อนสร้างแมปพร็อกซี
สำหรับรูปแบบ IPv4 ของผู้ให้บริการพร็อกซี HTTP ip:port:user:password ให้แปลงฟิลด์ก่อนส่งค่าให้ Requests:
from ipaddress import IPv4Address
from urllib.parse import quote
def proxy_map(line):
host, port, user, password = line.rstrip('\r\n').split(':', 3)
host = str(IPv4Address(host))
port = int(port)
if not 1 <= port <= 65535:
raise ValueError('Proxy port is out of range')
credentials = quote(user, safe='') + ':' + quote(password, safe='')
url = f'http://{credentials}@{host}:{port}'
return {'http': url, 'https': url}
การแบ่งแบบจำกัดจะคงเครื่องหมายทวิภาคเพิ่มเติมใด ๆ ที่อยู่ในรหัสผ่านไว้ การลบเฉพาะอักขระขึ้นบรรทัดใหม่ยังช่วยหลีกเลี่ยงการตัดช่องว่างที่อาจเป็นส่วนหนึ่งของข้อมูลรับรองออกอย่างเงียบ ๆ
เข้ารหัสชื่อผู้ใช้และรหัสผ่านเป็นองค์ประกอบ URL แยกกัน เครื่องหมาย @ ในรหัสผ่านดิบต้องไม่ถูกสับสนกับตัวคั่นก่อนโฮสต์พร็อกซี ฟังก์ชันนี้คาดหวังข้อมูลรับรองแบบดิบ การส่งข้อความที่เข้ารหัสแล้วอาจทำให้เครื่องหมายเปอร์เซ็นต์ถูกเข้ารหัสซ้ำ
แมปที่ส่งคืนจะเลือกพร็อกซีนี้สำหรับปลายทาง HTTP และ HTTPS คีย์อย่าง http://192.0.2.10 มีความหมายอื่นใน Requests: มันเลือกเส้นทางสำหรับโฮสต์ปลายทางนั้น ไม่ใช่ดัชนีสำหรับกลุ่มเซิร์ฟเวอร์พร็อกซี
ตัวแยกวิเคราะห์ยอมรับรูปแบบ IPv4 ที่ระบุไว้โดยเจตนา ไม่ครอบคลุมชื่อผู้ใช้ที่มีเครื่องหมายทวิภาคหรือที่อยู่ IPv6 ที่ไม่มีวงเล็บ ซึ่งต้องใช้รูปแบบอินพุตที่ชัดเจนไม่กำกวม เก็บ URL ที่มีข้อมูลรับรองซึ่งสร้างขึ้นให้ห่างจากบันทึกทั่วไป