Python urllib: Tek Bir Opener İçin Proxy’leri Kapatın
Diğer istemcileri ve süreç ortamını değiştirmeden ProxyHandler({}) ile doğrudan bağlanan bir urllib opener oluşturun.
Tek bir urllib opener doğrudan bağlanacaksa ProxyHandler’a boş bir eşleme verin:
from urllib.request import ProxyHandler, build_opener
direct = build_opener(ProxyHandler({}))
with direct.open("https://example.com/", timeout=10) as response:
print(response.status)
Boş sözlük hiçbir proxy rotası sağlamaz. Eşlemeyi hiç vermemek ise işleyicinin ortamdan ve platform ayarlarından proxy keşfetmesine izin verir. Bu iki oluşturma biçimi farklı politikaları ifade eder.
Örnek Python’un standart kitaplığını kullanır ve normal HTTPS doğrulamasını korur. with bloğu yanıtı kapatır; bir istisna nedeniyle bloktan çıkıldığında da böyledir.
Aynı uygulamada doğrudan ve proxy üzerinden istekler
İki opener, çağrılar arasında ortam değişkenlerini değiştirmeden iki politikayı taşıyabilir:
from urllib.request import ProxyHandler, build_opener
direct = build_opener(ProxyHandler({}))
proxied = build_opener(ProxyHandler({
"http": "http://127.0.0.1:8080",
"https": "http://127.0.0.1:8080",
}))
with proxied.open("https://example.com/", timeout=10) as response:
print(response.status)
Geri döngü adresini kendi HTTP proxy’nizle değiştirin veya proxy üzerinden karşılaştırma için HTTP proxy listesinden bir aday seçin. Hizmet izin veriyorsa HTTPS hedefine bağlantıyı CONNECT üzerinden taşıyabilir. Dinleyicinin protokolü ve kimlik doğrulama desteği işleyiciyle uyumlu olmalıdır.
Varsayılan opener’ı değiştirmeyin
direct.open veya proxied.open çağrısını rotadan sorumlu nesne üzerinden yapın. install_opener, urllib’in kolaylık işlevlerinin kullandığı süreç genelindeki varsayılanı değiştirir; onu kullanan bir kitaplık ilgisiz kodu etkileyebilir. Yukarıdaki yalıtılmış opener için gerekli değildir.
timeout argümanı bir işlem ayarıdır; her aktarımın tamamını kapsayan gerçek zamanlı bir son süre değildir. Yalnızca işin gerektirdiği veriyi okuyun; işin toplam süresi kesin biçimde kısıtlıysa daha üst düzey bir son süre kullanın.
Bu opener nesneleri başka bir kitaplığın istemcisini, mevcut bir süreci veya tarayıcının proxy ayarlarını değiştirmez.