Requests için IPv4 ip:port:user:password girdilerini dönüştürme
ip:port:user:password değerini sınırlı bir bölme ile ayrıştırın ve proxy eşlemesini oluşturmadan önce kimlik bilgisi bileşenlerini kodlayın.
Bir HTTP proxy sağlayıcısının IPv4 biçimi ip:port:user:password ise, değeri Requests e vermeden önce alanları dönüştürün:
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}
Sınırlı bölme, parola içindeki ek iki nokta üst üsteleri korur. Yalnızca satır sonlarını kaldırmak, bir kimlik bilgisine ait olabilecek boşlukların sessizce kırpılmasını da önler.
Kullanıcı adını ve parolayı ayrı URL bileşenleri olarak kodlayın. Ham paroladaki @ işareti proxy ana bilgisayarından önceki ayırıcıyla karıştırılmamalıdır. Bu işlev ham kimlik bilgileri bekler; zaten kodlanmış metin verilirse yüzde işareti yeniden kodlanabilir.
Döndürülen eşleme, HTTP ve HTTPS hedefleri için bu proxy yi seçer. http://192.0.2.10 gibi bir anahtarın Requests te başka bir anlamı vardır: o hedef ana bilgisayar için bir yol seçer. Proxy sunucuları havuzu için bir dizin değildir.
Ayrıştırıcı, belirtilen IPv4 biçimini kasıtlı olarak kabul eder. İki nokta üst üste içeren kullanıcı adlarını veya köşeli parantez olmadan IPv6 adreslerini kapsamaz; bunlar belirsizlik taşımayan bir girdi biçimi gerektirir. Oluşturulan kimlik bilgisi içeren URL leri olağan günlüklerin dışında tutun.