İçeriğe geç

Python Requests'te Kimlik Doğrulamalı Proxy'ler: Güvenli Bağlantı

Инструменты
Python Requests'te Kimlik Doğrulamalı Proxy'ler: Güvenli Bağlantı

Python Requests kütüphanesinde kimlik doğrulamalı proxy kullanmak, kimlik bilgilerinin gömülü olduğu proxy URL'lerinden oluşan bir sözlük geçirmek ya da proxy sunucusuna kimliğinizi doğrulatan özel kimlik doğrulama handler'ları kullanmak anlamına gelir. Bu kurulum, proxy ağ geçidine yalnızca yetkili kullanıcıların erişmesini sağlar; böylece bant genişliğiniz korunur ve web scraping, otomasyon ve veri toplama işleri için güvenli bir tünel elde edersiniz.

Python Requests'te proxy kimlik doğrulamasını anlamak

Proxy kimlik doğrulaması, proxy sunucusunun istemcinin trafiğini yönlendirmesine izin vermeden önce kullanıcı adı ve parola istediği bir güvenlik mekanizmasıdır. Python'un requests kütüphanesinde bu genellikle proxies parametresiyle yapılır. Kütüphane, GProxy gibi çoğu residential ve datacenter proxy sağlayıcısının sektör standardı olan HTTP Basic Authentication'ı varsayılan olarak destekler.

Kimlik doğrulamalı bir proxy üzerinden istek gönderdiğinizde istemci, Proxy-Authorization başlığını ekler. Bu başlık, base64 ile kodlanmış kimlik bilgilerini içerir. Kimlik bilgileri eksik ya da hatalıysa proxy sunucusu 407 Proxy Authentication Required durum kodunu döndürür. Bu istekleri doğru biçimlendirmeyi bilmek, ölçeklenebilir bir veri hattı ile bağlantı hataları yüzünden sürekli çöken bir betik arasındaki farktır.

Python Requests'te Kimlik Doğrulamalı Proxy'ler: Güvenli Bağlantı

Temel proxy kimlik doğrulamasını kurma

Python Requests'te kimlik doğrulamayı uygulamanın en doğrudan yolu, kimlik bilgilerini doğrudan proxy URL dizesine gömmektir. Biçim, standart URI şemasını izler: http://user:password@host:port.

import requests

# GProxy kimlik bilgilerinizi tanımlayın
proxy_username = "your_username"
proxy_password = "your_password"
proxy_host = "proxy.gproxy.com"
proxy_port = "8080"

# Proxy sözlüğünü oluşturun
proxies = {
    "http": f"http://{proxy_username}:{proxy_password}@{proxy_host}:{proxy_port}",
    "https": f"http://{proxy_username}:{proxy_password}@{proxy_host}:{proxy_port}",
}

try:
    response = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=10)
    print(response.json())
except requests.exceptions.ProxyError as e:
    print(f"Proxy connection failed: {e}")

Bu örnekte proxies sözlüğü, protokolü (http veya https) kimlik doğrulamalı proxy URL'sine eşler. Hedef sitenin şifrelemesinden bağımsız olarak tüm trafiğin proxy üzerinden gitmesi için sözlükte her iki anahtarın da bulunması şarttır.

Paroladaki özel karakterleri ele almak

Yaygın bir tuzak, proxy parolalarının @, : veya / gibi özel karakterler içermesidir. Bu karakterler bir URL'de ayraç görevi gördüğü için dize ayrıştırma mantığını bozabilir. Bunu önlemek için kimlik bilgilerini URL kodlamak üzere urllib.parse.quote kullanın.

from urllib.parse import quote
import requests

user = quote("user@domain")
password = quote("p@ssword!")
proxy_url = f"http://{user}:{password}@proxy.gproxy.com:8080"

proxies = {"http": proxy_url, "https": proxy_url}

Kalıcı bağlantılar için Session nesnelerini kullanmak

Yüksek performanslı uygulamalarda her istek için yeni bir bağlantı açmak verimsizdir. GProxy kullanıcılarının çoğu zaman "sticky session" sürdürmesi ya da yalnızca TCP el sıkışmasının maliyetini azaltması gerekir. requests.Session() nesnesi, proxy yapılandırmasını bir kez tanımlayıp birden çok istekte yeniden kullanmanızı sağlar.

import requests

session = requests.Session()
session.proxies = {
    "http": "http://user:pass@host:port",
    "https": "http://user:pass@host:port",
}

# 'session' ile yapılan sonraki tüm istekler kimlik doğrulamalı proxy'yi kullanır
response1 = session.get("https://api.ipify.org")
response2 = session.get("https://httpbin.org/user-agent")

print(response1.text, response2.text)

Session nesnesi kullanmanın birkaç teknik avantajı vardır:

  • Bağlantı havuzu: proxy sunucusuna açık bağlantıları yeniden kullanır ve gecikmeyi belirgin biçimde azaltır.
  • Çerez kalıcılığı: istekler arasında çerezleri otomatik yönetir; giriş duvarı olan siteleri kazımak için bu şarttır.
  • Daha temiz kod: proxies sözlüğünü her get() veya post() çağrısına ayrı ayrı geçirmeniz gerekmez.
Python Requests'te Kimlik Doğrulamalı Proxy'ler: Güvenli Bağlantı

SOCKS5 proxy kimlik doğrulaması

HTTP proxy'ler yaygın olsa da SOCKS5 proxy'ler, her tür trafiği (TCP/UDP) taşıyabilen daha alt seviyeli bir protokol sunar. Python Requests'te kimlik doğrulamalı SOCKS5 kullanmak için PySocks bağımlılığını kurmanız gerekir:

pip install requests[socks]

Kurulumdan sonra uygulama benzerdir, yalnızca protokol öneki socks5h olur ("h" harfi DNS çözümlemesinin proxy tarafında yapılmasını sağlar; bu anonimlik için daha iyidir).

proxies = {
    "http": "socks5h://user:pass@host:port",
    "https": "socks5h://user:pass@host:port"
}
response = requests.get("https://httpbin.org/ip", proxies=proxies)

Python entegrasyonu için proxy türlerinin karşılaştırması

Doğru proxy türünü seçmek kullanım senaryonuza bağlıdır. GProxy, her biri farklı kimlik doğrulama davranışına ve performans profiline sahip çeşitli seçenekler sunar.

Proxy türü Kimlik doğrulama yöntemi Başlıca kullanım alanı Başarı oranı
Veri merkezi Kullanıcı/parola veya IP beyaz listesi Yüksek hızlı toplu scraping Orta
Residential Kullanıcı/parola (rotasyonlu) Anti-bot sistemlerini aşma Yüksek
ISP (statik) Kullanıcı/parola Sosyal medya yönetimi Çok yüksek
Mobil Kullanıcı/parola Uygulama testi ve yüksek güvenlikli hedefler En yüksek

Gelişmiş hata yönetimi ve yeniden denemeler

Üretim ortamlarında proxy bağlantıları ağ dengesizliği ya da IP rotasyonu nedeniyle kopabilir. Sağlam bir kod bu istisnaları düzgün ele almalıdır. GProxy kullanırken kimlik bilgileriniz süresi dolarsa 407 hatası, ağ geçidine ulaşılamıyorsa ProxyError alabilirsiniz.

Üstel geri çekilmeli (exponential backoff) bir yeniden deneme stratejisi kurmak profesyonel yaklaşımdır. requests kütüphanesinin içeride kullandığı urllib3, güçlü bir Retry aracı sunar.

from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
import requests

def get_secure_session(proxy_dict):
    session = requests.Session()
    retries = Retry(
        total=5,
        backoff_factor=1,
        status_forcelist=[407, 500, 502, 503, 504],
        raise_on_status=True
    )
    adapter = HTTPAdapter(max_retries=retries)
    session.mount("http://", adapter)
    session.mount("https://", adapter)
    session.proxies = proxy_dict
    return session

my_proxies = {"https": "http://user:pass@host:port"}
secure_session = get_secure_session(my_proxies)

try:
    res = secure_session.get("https://target-site.com")
    print(res.status_code)
except Exception as e:
    print(f"Failed after retries: {e}")

Güvenlik açısından en iyi uygulamalar

  1. Kimlik bilgilerini asla koda gömmeyin: GProxy kullanıcı adı ve parolanızı saklamak için ortam değişkenlerini (os.getenv) kullanın. Bu, GitHub gibi sürüm kontrol sistemlerinde kazara sızıntıları önler.
  2. Hedef için HTTPS kullanın: proxy bağlantısı HTTP olsa bile hedef siteye her zaman https:// üzerinden erişmeye çalışın; böylece verileriniz uçtan uca şifrelenir.
  3. Kimlik bilgilerini döndürün: olası bir sızıntının etkisini azaltmak için proxy parolalarınızı GProxy panelinden düzenli aralıklarla güncelleyin.
  4. SSL'i doğrulayın: Requests'te varsayılan değer verify=True'dur. Kontrollü bir test ortamında değilseniz bunu False yapmayın; aksi halde Man-in-the-Middle (MITM) saldırılarına açık hale gelirsiniz.

Öne çıkanlar

Python Requests'te proxy kimlik doğrulamasında ustalaşmak, dayanıklı ve güvenli otomasyon araçları kurmak için şarttır. Proxy URL'lerini biçimlendirmeyi, özel karakterleri ele almayı, performans için session nesnelerini kullanmayı ve sağlam bir yeniden deneme mantığı kurmayı öğrendiniz.

  • Biçim önemlidir: her zaman http://user:pass@host:port söz dizimini kullanın ve özel karakter içeren kimlik bilgilerini URL kodlayın.
  • Verimlilik: bağlantı havuzundan yararlanmak için requests.Session() kullanın; bu, yüksek performanslı GProxy residential ağlarında özellikle faydalıdır.
  • Dayanıklılık: geçici 407 ve 5xx hatalarını otomatik ele almak için urllib3 yeniden denemelerini uygulayın.

Pratik ipucu 1: hata ayıklarken betiğinizin gönderdiği başlıkları incelemek için https://httpbin.org/get gibi bir servis kullanın. Bu, Proxy-Authorization başlığının doğru üretilip üretilmediğini doğrulamanıza yardımcı olur.

Pratik ipucu 2: proxy sağlayıcınız IP beyaz listesini destekliyorsa, ek bir güvenlik katmanı için bunu kullanıcı/parola kimlik doğrulamasıyla birlikte kullanmayı düşünün; böylece proxy kaynaklarınıza fiilen "çift faktörlü" bir kilit koymuş olursunuz.

support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.