Untuk format IPv4 penyedia proksi HTTP ip:port:user:password, tukar medan sebelum memberikan nilai kepada 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}

Pemisahan terhad mengekalkan sebarang titik bertindih tambahan di dalam kata laluan. Mengeluarkan hanya penghujung baris juga mengelakkan pembuangan senyap ruang yang mungkin milik kelayakan.

Kodkan nama pengguna dan kata laluan sebagai komponen URL yang berasingan. Simbol @ dalam kata laluan mentah tidak boleh dikelirukan dengan pemisah sebelum hos proksi. Fungsi ini menjangka kelayakan mentah; menghantar teks yang sudah dikodkan boleh mengkodkan tanda peratus sekali lagi.

Peta yang dikembalikan memilih proksi ini untuk destinasi HTTP dan HTTPS. Kunci seperti http://192.0.2.10 mempunyai makna lain dalam Requests: ia memilih laluan untuk hos destinasi itu. Ia bukan indeks untuk kumpulan pelayan proksi.

Penghurai sengaja menerima format IPv4 yang dinyatakan. Ia tidak merangkumi nama pengguna yang mengandungi titik bertindih atau alamat IPv6 tanpa kurungan; semuanya memerlukan format input yang tidak kabur. Jauhkan URL yang mengandungi kelayakan yang dijana daripada log rutin.

Artikel berkaitan