Konversi entri IPv4 ip:port:user:password untuk Requests
Uraikan ip:port:user:password dengan pemisahan terbatas dan enkode komponen kredensial sebelum membangun peta proxy.
Untuk format IPv4 penyedia proxy HTTP ip:port:user:password, konversi kolomnya sebelum memberikan nilai ke 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 terbatas mempertahankan setiap titik dua tambahan di dalam kata sandi. Menghapus hanya akhir baris juga mencegah pemangkasan diam-diam spasi yang mungkin merupakan bagian dari kredensial.
Enkode nama pengguna dan kata sandi sebagai komponen URL terpisah. Tanda @ dalam kata sandi mentah tidak boleh dikacaukan dengan pemisah sebelum host proxy. Fungsi ini mengharapkan kredensial mentah; memberikan teks yang sudah dienkode dapat mengenkode ulang tanda persen.
Peta yang dikembalikan memilih proxy ini untuk tujuan HTTP dan HTTPS. Kunci seperti http://192.0.2.10 memiliki arti lain di Requests: kunci itu memilih rute untuk host tujuan tersebut. Ini bukan indeks kumpulan server proxy.
Parser sengaja hanya menerima format IPv4 yang disebutkan. Parser tidak mencakup nama pengguna bertitik dua atau alamat IPv6 tanpa tanda kurung; keduanya memerlukan format masukan yang tidak ambigu. Jauhkan URL hasil pembuatan yang membawa kredensial dari log rutin.