Python Requests’te proxy IP kullanmak
Requests’te istek başına açık proxy rotaları tanımlayın, doğru uç nokta şemasını seçin ve zaman aşımlarıyla HTTPS tünel hatalarını ele alın.
Projenizde Requests varsa çağrıya bir proxy eşlemesi geçirin:
import requests
proxies = {
"http": "http://127.0.0.1:8080",
"https": "http://127.0.0.1:8080",
}
response = requests.get(
"https://example.com/",
proxies=proxies,
timeout=(5, 15),
)
response.raise_for_status()
print(response.status_code)
Geri döngü uç noktasını çalışan proxy’nizle veya bu istekle test edeceğiniz HTTP proxy listesinden bir adayla değiştirin. Anahtarlar hedef şemalarını belirtir: HTTP URL’leri için http, HTTPS URL’leri için https. Değerler proxy dinleyicisini belirtir. Ağınız ayrı rotalar gerektiriyorsa bunlar farklı uç noktalar olabilir.
http:// proxy değerinin https anahtarı altında bulunması kasıtlıdır. Requests, HTTP dinleyicisinden CONNECT tüneli ister, ardından proxy’nin hedef ve bağlantı noktası politikasına tabi olarak bu tünelden hedef TLS bağlantısını kurar. Değeri https:// olarak değiştirmek proxy’nin kendisine TLS ister; dinleyici şifrelenmemiş HTTP bekliyorsa başarısız olabilir.
İki zaman aşımı sayısı ne anlama gelir?
timeout=(5, 15) bağlantı ve okuma zaman aşımlarını ayarlar. Toplamda on beş saniyelik kesin bir süre koymaz. Düzenli gelen veri, birden fazla adres ve bağlantı denemeleri geçen süreyi uzatabilir. Ayarı atlarsanız Requests genel bir zaman aşımı sağlamaz; yanıta uygun sınırlar seçin ve işin kesin bir toplam süre bütçesi varsa uygulama düzeyinde son süre ekleyin.
Hatayı oluştuğu aşamada ele alın
try:
response = requests.get(
"https://example.com/",
proxies=proxies,
timeout=(5, 15),
)
response.raise_for_status()
except requests.exceptions.ProxyError as error:
print("Proxy setup failed:", type(error).__name__)
except requests.exceptions.Timeout:
print("A configured timeout expired")
except requests.exceptions.HTTPError as error:
print("HTTP status:", error.response.status_code)
Reddedilen CONNECT, hedef yanıtı oluşmadan önce ProxyError doğurabilir. HTTPError dalı, hata durumlu bir yanıt alındıktan sonra gelir; Timeout ayarlanmış bir sınırın dolduğunu belirtir. Bağlantı kurma istisna zincirlerini yerel olarak inceleyin; paylaşmadan önce kimlik bilgili uç noktaları ve özel URL’leri kaldırın.
Sertifika doğrulamasını açık bırakın. Yetkili ağ özel CA veya yönetilen araya girme kullanıyorsa doğrulamayı kapatmak yerine beklenen güven malzemesini sağlayın.
İstek başına açık girdiler burada verilen rotaları kontrol eder, ancak belirtilmeyen şemalar ortamdan proxy keşfinden hâlâ etkilenebilir. Çağrıyı yeniden kullanılabilir bir Session içine taşırken ortam değişkenleri, Session varsayılanları ve istek başına geçersiz kılmaların nasıl etkileşeceğine karar verin; bağlantı yeniden kullanımı ve yönlendirme politikası ayrı tercihlerdir.