Python requests proxy: kimlik doğrulama, zaman aşımları ve hatalar

16 dk

Python requests'i HTTP veya SOCKS5 proxy üzerinden yönlendirin: proxies dict, kullanıcı adı/parola, ortam değişkenleri, zaman aşımları ve ProxyError, 407 ile SSLError'un gerçekte ne demek olduğu.

Python Requests'in bir proxy üzerinden gitmesi ve proxy yaramazlık yaptığında çalışmayı sürdürmesi gereken geliştiriciler için bu rehber. Örnekler yer tutucu ana bilgisayarlar ve sahte kimlik bilgileri kullanır. Top Proxy IP satmaz, ücretsiz liste de dağıtmaz; satan hizmetleri karşılaştırırız.

Parçacıklar PyPI'deki Requests 2.34.2'yi hedefler; Python 3.10 veya daha yenisi gerekir. Aşağıdaki proxy davranışı Requests advanced usage belgelerini izler. Ana durumları 2026-10-14'te pinlenmiş bir loopback düzeneğine karşı yeniden çalıştırdık (Python 3.14.6, Requests 2.34.2, urllib3 2.8.0, PySocks 1.7.1, TLS doğrulaması açık). O laboratuvar yalnızca protokol davranışını gösterir; bir sağlayıcının hızını, konumlarını veya IP kalitesini değil.

01En küçük Python requests proxy örneği

Her istek yöntemi bir proxies dict alır. Anahtarlar hedef URL'nin şemasıdır; değerler proxy URL'sidir:

import requests

proxies = {
    "http": "http://203.0.113.10:8080",
    "https": "http://203.0.113.10:8080",
}

r = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=(3.05, 27))
print(r.status_code, r.json())

İki ayrıntı insanı düşürür. Birincisi, "https" anahtarı genelde bir http:// proxy URL'sine bakar. Bu doğrudur: istemci proxy'den bir CONNECT tüneli ister ve TLS onun içinde koşar. Oraya https:// yalnızca sağlayıcınız TLS'i proxy portunda sonlandırıyorsa koyun. İkincisi, proxy URL'sini açık şemayla yazın (http://, https://, socks5:// veya socks5h://) ki protokol belirsiz olmasın. Requests 2.34.2 şemasız sıradan bir host:port'un önüne http:// ekler; bu geçersiz bir proxy URL'si değildir. InvalidProxyURL, şema atlandığı için değil, dizge ayrıştıktan sonra hâlâ ana bilgisayar yokken yükseltilir.

httpbin.org/ip origin alanlı JSON döndürür; sunucunun gördüğü adrestir. Bunu tarifiniz için sağlayıcının belgelendirdiği çıkış IP'si veya aralıkla karşılaştırın ve doğrudan adresinizi IP adresim üzerinde not edin. Değişmeyen bir adres tek başına proxy'nin atlandığını kanıtlamaz. Kimi kurulumlar oturduğunuz aynı ağdan çıkar. Yalnızca bir ucun yanıt verip vermediğini bilmek yeterse proxy kontrolü veya daha uzun bir proxy'nin çalışıp çalışmadığı yürüyüşünü kullanın.

Bir scheme://hostname anahtarı tam bir ana bilgisayarı farklı yönlendirir:

proxies = {
    "https": "http://203.0.113.10:8080",
    "https://api.internal.example": "http://198.51.100.5:3128",
}

O ana bilgisayar eşleşmesi tamdır. Aynı alan altındaki her ada uygulanmaz.

02Session üzerinde proxy ayarları (ve ortam tuzağı)

Bir Session bağlantıları yeniden kullanır ve varsayılanları tek yerde tutar:

session = requests.Session()
session.proxies.update(proxies)
session.get("https://httpbin.org/ip", timeout=10)

Requests belgeleri session.proxies'in beklediğiniz gibi davranmayabileceği uyarısını verir. Oraya konan değerler ortam proxyleri tarafından üzerine yazılabilir (urllib.request.getproxies() ne döndürürse). Devralınan bir HTTPS_PROXY sessizce kazanabilir. Seçimi açık kılmanın iki yolu:

# Option 1: pass proxies on every call (the documented fix)
session.get(url, proxies=proxies, timeout=10)

# Option 2: stop the session from reading the environment
session.trust_env = False
session.proxies.update(proxies)

trust_env = False ayrıca oturumun .netrc ve REQUESTS_CA_BUNDLE gibi CA paketi değişkenlerini okumasını da durdurur.

Bu kâğıt uyarısı değildir. 2026-10-14 düzeneğinde Session.proxies bir loopback proxy'ye, HTTP_PROXY / HTTPS_PROXY başka birine bakıyordu. GET'i ortam proxy'si aldı. Aynı oturum, çağrıda proxies= geçilince oturum proxy'sine vurdu. trust_env = False olan ikinci bir oturum Session.proxies kullandı ve ortamı yok saydı. Bir betik «rastgele» CI proxy'sini kullanıyorsa URL'yi yeniden yazmadan önce buraya bakın.

03Python requests proxy ortam değişkenleri

proxies'i hiç geçmezseniz Requests standart http_proxy, https_proxy, no_proxy ve all_proxy değişkenlerini okur. Sıradan bir süreçte büyük harfli adlar da çalışır. Bu, HTTP için http_proxy'nin küçük harfli değişken olduğu curl HTTP kuralı değildir. Bir CPython istisnası: REQUEST_METHOD ayarlıysa (CGI süreci) urllib.request.getproxies_environment() HTTP_PROXY'den gelen HTTP eşlemesini düşürür, böylece istemci Proxy: başlığı onu enjekte edemez. Küçük harfli http_proxy yine uygulanabilir.

export HTTP_PROXY="http://203.0.113.10:8080"
export HTTPS_PROXY="http://203.0.113.10:8080"
export NO_PROXY="localhost,127.0.0.1,.internal.example"
python my_script.py

NO_PROXY olmadan localhost veya iç hizmet çağrıları ortam proxy'sinden geçip zaman aşımına uğrayabilir. NO_PROXY yalnızca ortamdan alınan proxyleri yönetir. NO_PROXY'ye uyan bir ana bilgisayar, onu kapsayan açık bir proxies= dict geçerseniz yine proxylenebilir.

Düzenek iki tarafı da doğruladı. NO_PROXY=127.0.0.1,localhost ve proxies= argümanı yokken GET doğrudan yerel origin'e gitti; laboratuvar proxy'lerinin hiçbiri onu görmedi. Aynı ana bilgisayar, açık bir proxies= dict ile geçtiğimiz proxy'den gitti. «Kabukta çalışıyor, worker'da değil» hatasının sık nedeni iki farklı kütüphane değil, iki farklı yapılandırma yoludur.

Ayar nereden gelirNeye uygulanırNe zaman kullanılır
İstekte proxies= argümanıO tek çağrı, ortam proxylerini ezerBelirli bir çıkış kullanması gereken betikler, örneğin istek başına rotasyon
Session.proxiesO oturumdaki her çağrı, ortam ezmediği süreceUzun yaşayan istemciler, ideal olarak trust_env = False ile
HTTP_PROXY / HTTPS_PROXY / ALL_PROXYOrtama hâlâ güvenen süreçteki her Requests çağrısıKodu düzenleyemediğiniz üçüncü taraf araçlar ve CI
NO_PROXYOrtam proxylerini atlayan ana bilgisayarlar (açık proxies= yine onları kapsayabilir)Localhost, metadata uçları, iç API'ler

04Python requests proxy kimlik doğrulaması (kullanıcı adı ve parola)

Ücretli proxylerin çoğu giriş ister. Requests, HTTP Basic proxy kimliğini URL'nin kendisi üzerinden destekler, http://user:***@host:port, proxies dict'te veya ortam değişkenlerinin herhangi birinde:

import os
from urllib.parse import quote

user = quote(os.environ["PROXY_USER"], safe="")
password = quote(os.environ["PROXY_PASS"], safe="")
host = "gate.example-provider.com:7000"

proxy_url = f"http://{user}:{password}@{host}"
proxies = {"http": proxy_url, "https": proxy_url}

Kimlik bilgilerini çalışma anında bir sır yöneticisinden yükleyin. Requests belgeleri onları ortam değişkenlerinde veya sürümlenmiş dosyalarda saklamayı güvenlik riski sayar. Kullanıcı adı ve parolanın ikisini de yüzde kodlayın. Requests URL'den çektiği her iki parçayı da çözer, bu yüzden birindeki @, :, / veya # quote(..., safe="")'den geçmek zorundadır. Aksi halde URL yanlış ayrışabilir ve proxy göndermeyi düşündüğünüz kimlik bilgilerini hiç görmez. Çözüldükten sonra HTTP Basic user-id iki nokta içeremez (RFC 7617 bölüm 2); parola içerebilir. Kullanıcı adındaki iki noktayı yüzde kodlamak bunu yasal yapmaz: Requests onu yine iki noktaya çözer. userinfo'daki fazladan kodlanmamış iki nokta parolanın başlangıcı diye ayrışır (alice:bob:secret kullanıcı alice, parola bob:secret olur).

Kullanıcı adındaki ülke veya sticky-session bayrakları (user-country-us-session-abc123) sağlayıcı sözdizimidir, Requests özelliği değildir. Tek başlarına coğrafya veya hesap vermezler.

Eski yanıtlarda requests.auth.HTTPProxyAuth de görebilirsiniz. İstek nesnesine bir Proxy-Authorization başlığı ekler. Loopback testinde düz HTTP isteklerini kimlik doğruladı (200), ama HTTPS isteği 407'den bahseden ProxyError ile başarısız oldu. Bu, başlığın proxy'nin baktığı CONNECT'te değil istekte gitmesine uyar. Kimlik bilgilerini URL'de tutmayı tercih edin.

Requests yalnızca Basic proxy kimliğini işler. NTLM veya Kerberos/Negotiate proxyler üçüncü taraf bir kimlik kütüphanesi veya yerel bir yardımcı proxy ister.

Yazdığınız soru yalnızca «407 ne demek?» ise o durumun kendi sayfası vardır: 407 Proxy Authentication Required. Bu yazı Requests'in onu nasıl yüzeye çıkardığında kalır.

05requests içinde SOCKS5 proxy

SOCKS desteği, PySocks çeken isteğe bağlı bir ektir (yazı sırasında PyPI'de 1.7.1):

python -m pip install "requests[socks]"

Ondan sonra SOCKS URL'leri, kimlik bilgileri dahil, aynı proxies dict'te çalışır:

proxies = {
    "http": "socks5h://user:***@203.0.113.10:1080",
    "https": "socks5h://user:***@203.0.113.10:1080",
}

h'ye dikkat edin. socks5:// ile DNS çözümlemesi sizin makinenizde olur ve proxy'ye yalnızca sonuç IP gider. socks5h:// ile proxy ana bilgisayar adını çözer. curl'ün kullandığı aynı ayrımdır.

Düzenek bunu https://example.com/ üzerinde görünür kıldı. İki şema da 200 döndü. SOCKS sunucusu socks5:// için ATYP 1 (IPv4, 172.66.147.243), socks5h:// için ATYP 3 (ana bilgisayar adı example.com) kaydetti. 127.0.0.1'e HTTP çağrıları farkı göstermez, çünkü bir IP zaten adrestir. Yerel çözümleyicinin bakışları görmesini istemiyorsanız socks5h kullanın. Katalog dilinde protokol karşılaştırması için SOCKS5 ve HTTP proxy yazısına bakın.

Proxy URL şemasıGereken ekstraDNS'i kim çözerTipik kullanım
http://YokProxy, istediğiniz ana bilgisayar adı içinÇoğu ücretli HTTP(S) geçit
https://YokProxyTLS'i proxy portunda sonlandıran sağlayıcılar
socks5://requests[socks]Sizin makinenizYerel DNS'in kabul edilebilir olduğu SOCKS proxyler
socks5h://requests[socks]ProxySOCKS proxyler, DNS bakışları proxy tarafında kalır

Bir ucun ne konuştuğundan emin değil misiniz? Proxy kontrolü üzerinden geçirin.

06Python requests proxy zaman aşımı

Requests'in varsayılan zaman aşımı yoktur, bu yüzden takılı bir proxy bir çağrıyı dakikalarca asabilir. Her zaman timeout geçin, ideal olarak (connect, read) demeti:

r = requests.get(url, proxies=proxies, timeout=(3.05, 27))

Connect değeri TCP bağlantısını kapsar; proxy varken bu proxy'ye bağlantıdır. Belgeler TCP yeniden iletimiyle hizalanması için 3'ün katının biraz üstünde bir değer önerir. Read değeri sunucudan gelen baytlar arasındaki en uzun boşluktur, toplam indirme süresine tavan değildir. Gecikme sağlayıcıya, çıkışa ve hedefe bağlıdır, bu yüzden read değerini gerçek ucunuzda ölçülen yanıtlardan koyun.

İşlevli bir yakalama: proxy'nin kendisi TCP bağlantısını zamanında kabul etmezse Requests 2.34.2, üst düzey ConnectTimeout değil, urllib3'ün ConnectTimeoutError'ını saran ProxyError yükseltti. Düzeneğinde 192.0.2.1:8080'e karşı timeout=(1.0, 5) o sarmalayıcıyı üretti. Çalışan bir proxy bağlandıktan sonra timeout=(3.05, 1.0) ile yavaş bir origin ReadTimeout yükseltti. Genel bir ConnectionError'dan önce ProxyError ve ReadTimeout yakalayın; «proxy hiç yanıt vermedi»yi «proxy yanıtladı, sonra site sustu»dan ayırmak için iletiye veya __cause__'a bakın.

Geçici başarısızlıklarda döngüyü elle yazmak yerine sınırlı yeniden denemeli bir adapter bağlayın:

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

retry = Retry(total=3, backoff_factor=0.5, status_forcelist=[429, 502, 503, 504])
session.mount("https://", HTTPAdapter(max_retries=retry))
session.mount("http://", HTTPAdapter(max_retries=retry))

Durum yeniden denemeleri allowed_methods'i izler. urllib3 2.8.0'ın varsayılan kümesi GET, HEAD, PUT, DELETE, OPTIONS ve TRACE'dir; siz eklemedikçe POST dışarıdadır. Yinelemeyi yalnızca iki kez göndermesi güvenli işlemlere açın. total=3 yeniden deneme sayısını sınırlar, duvar saati süresini değil. Yanıtta Retry-After varsa urllib3, respect_retry_after_header doğruysa (varsayılan) o gecikmeyi bekler.

Yeniden denemeler 407'yi, kötü bir CA'yı veya yanlış geçide bakan trust_env'i düzeltmez. Yalnızca başarısızlık gerçekten geçiciyken yardım eder.

07Python requests proxy hataları: her istisna ne demek

except bloklarınızı dikkatle sıralayın. ProxyError, SSLError ve ConnectTimeout hepsi ConnectionError alt sınıfıdır; ConnectTimeout ayrıca bir Timeout'tur. Özgülleri önce yakalayın:

from requests.exceptions import (
    ProxyError, SSLError, ConnectTimeout, ReadTimeout,
    ConnectionError, InvalidProxyURL, RequestException,
)

try:
    r = session.get(url, proxies=proxies, timeout=(3.05, 27))
    r.raise_for_status()
except ProxyError as e:
    ...  # proxy unreachable, CONNECT refused, or connect-timeout to the proxy; check the message for 407
except SSLError as e:
    ...  # certificate problem; fix trust, don't disable verification
except ConnectTimeout:
    ...  # could not connect in time (more often seen without a proxy)
except ReadTimeout:
    ...  # connected, but the server went quiet
except InvalidProxyURL:
    ...  # malformed proxy URL
except ConnectionError:
    ...  # DNS failure, reset, other network errors
except RequestException:
    ...  # anything else from requests
BelirtiOlası nedenNe denemeli
İletide 407 olmayan ProxyErrorO ana bilgisayar/portta bağlantı kabul eden bir şey yok, proxy düşmüş, ağ/izin listesi bloğu veya proxy'ye bağlanma zaman aşımıAna bilgisayar ve portu kontrol edin, sonra ucu proxy kontrolü içinde deneyin; kimlik bilgileri ilk şüpheli değildir
HTTPS URL'de 407'den bahseden ProxyErrorCONNECT proxy'nin kabul ettiği kimlik bilgisi taşımadı: hiç gönderilmedi, yalnızca HTTPProxyAuth ile kondu, yanlış kodlandı, yanlış biçim veya tarife pasifKodlanmış kimlik bilgilerini proxy URL'sine koyun; kullanıcı adı biçimini ve tarife durumunu doğrulayın
HTTP URL'de durum 407 yanıtıProxy kimlik bilgisi istiyor; onlar olmadan gönderilen bir istekte bu yalnızca meydan okumadırKimlik bilgilerini proxy URL'sine ekleyin; zaten oradaysa kodlama ve biçimi kontrol edin
Durum 401 yanıtıHedef, proxy değil, kimlik doğrulama istiyorSitenin kendi kimliğini düzeltin; proxy kısmı çalıştı
Requests Session.proxies'inizi yok sayıyorOrtam proxyleri onları eziyorÇağrı başına proxies= geçin veya trust_env = False koyun
InvalidSchema: Missing dependencies for SOCKS supportrequests[socks] kurulu değilpython -m pip install "requests[socks]"
SSLError: CERTIFICATE_VERIFY_FAILEDAraya giren proxy veya varsayılan paketin güvenmediği laboratuvar/kendi imzalı sertifikaverify= veya REQUESTS_CA_BUNDLE'ı o proxy'nin CA dosyasına bakın
Sonsuza kadar asılı kalırtimeout konmamışHer zaman bir (connect, read) demeti geçin
origin beklediğiniz çıkışla uyuşmuyorO şema için proxy uygulanmamış, ortam proxylerine güvenirken NO_PROXY eşleşmiş veya sandığınızdan farklı bir yolHem http hem https anahtarını koyun; ortam proxysi kullanıyorsanız NO_PROXY'yi kontrol edin; sağlayıcının belgelendirdiği çıkış IP/aralığıyla karşılaştırın

Yerel test ne gösterdi

Kontrollü yerel proxy düzeneğinden gözlenen Requests test sonuçları

Bu kalıpları 2026-10-14'te bir loopback test proxy'sine karşı çalıştırdık: Python 3.14.6, Requests 2.34.2, urllib3 2.8.0, certifi 2026.07.22, PySocks 1.7.1, aksi belirtilmedikçe timeout=(3.05, 10), TLS doğrulaması açık. Sahte kullanıcı demo; parola noktalama içeriyordu, URL'lerde yüzde kodlandı, sonra günlüklerde karartıldı. HTTPS kontrolleri https://example.com/ artı laboratuvar CA'lı yerel bir sunucu kullandı. Aşağıdaki satırlar o düzeneğin yakalanmış gözlemleridir, geçen otomatik test sayısı değil. Yalnızca protokol davranışını gösterir.

DurumHTTP hedefHTTPS hedef
Proxy kimlik bilgisi yok407 yanıtı407'den bahseden ProxyError
Proxy URL'sinde yüzde kodlanmış kimlik bilgileri200200 (example.com ve verify= laboratuvar CA'sına bakınca laboratuvar TLS)
Yalnızca HTTPProxyAuth200407'den bahseden ProxyError
Proxy portu kapalıProxyError, 407 yoktest edilmedi
Geçerli proxy kimliği, site 401 döndürürSiteden 401 yanıtıtest edilmedi
Varsayılan CA'ya karşı laboratuvar kendi imzalı sertifikayokSSLError: CERTIFICATE_VERIFY_FAILED; laboratuvar CA'sına güvendikten sonra 200
Session.proxies ve HTTP_PROXYOrtam proxy'si GET'i aldıtest edilmedi
Çağrıda proxies=, ortam ayarlıOturum/açık proxy GET'i aldıtest edilmedi
trust_env = FalseSession.proxies kullanıldı; ortam yok sayıldıtest edilmedi
NO_PROXY ana bilgisayarla eşleşirDoğrudan origin'e; proxy isabeti yoktest edilmedi
NO_PROXY ana bilgisayarında açık proxies=Yine proxylenditest edilmedi
Proxy'ye bağlanma zaman aşımıConnectTimeoutError saran ProxyErrortest edilmedi
Çalışan proxy üzerinden okuma zaman aşımıReadTimeouttest edilmedi

Kodlanmış kimlik bilgili SOCKS5, HTTP ve https://example.com/ için 200 döndü. DNS ayrımı: socks5:// proxy'ye bir IPv4 adresi teslim etti; socks5h:// ana bilgisayar adını teslim etti.

Sertifikalar, araya giren proxyler ve verify

Kurumsal bir TLS-inceleme geçidi veya yerel araya giren bir proxy HTTPS'i kendi sertifika otoritesiyle yeniden imzalar; Requests bunu reddeder. Doğrulamayı kapatmak yerine o CA'ya açıkça güvenin:

r = requests.get(
    url,
    proxies={"https": "http://127.0.0.1:8080"},
    verify="/path/to/proxy-ca.pem",
    timeout=10,
)

veya tüm süreç için export REQUESTS_CA_BUNDLE=/path/to/ca.pem. DER dışa aktarımını önce PEM'e çevirin. Laboratuvar kendi imzalı origin'i aynı sınıf hatayı üretti: varsayılan verify=True SSLError yükseltti (certificate verify failed: self-signed certificate); verify= laboratuvar CA'sına bakınca aynı istek 200 döndü. verify=False Requests'in herhangi bir sertifikayı kabul etmesini ve ana bilgisayar adı uyuşmazlıklarını yok saymasını sağlar; o istemcinin gönderdiği her şey için TLS'i bozar. «Çalışmayan» bir proxy için olağan düzeltme değildir.

08Python'da rotating proxy

Birçok ticari sağlayıcı tek bir geçit ana bilgisayarının arkasında sizin için döner. Tarifeye göre çıkış her istekte veya bir oturum aralığında değişebilir; kullanıcı adındaki bir oturum kimliği genelde her çağrıya yeni bir tane vermek yerine bir çıkışı bir süre pinler. Bu kurallar sağlayıcı ayarıdır, belgelerine bakın. Ürün dili sticky ve rotating proxy yazısındadır. Uç listesini kendiniz yönetiyorsanız istek başına birini seçin ve proxies= ile geçin:

import itertools

pool = itertools.cycle(
    [
        "http://user:***@203.0.113.10:8080",
        "http://user:***@203.0.113.11:8080",
    ]
)

for url in urls:
    p = next(pool)
    session.get(url, proxies={"http": p, "https": p}, timeout=(3.05, 27))

Proxy'yi çağrı başına geçin, çünkü ortam proxyleri Session.proxies'i ezebilir. Çıkış türü ayrı bir seçimdir: datacenter, residential veya mobil. Fiyat ve hedef sitenin trafiği nasıl saydığı tarife, hedef ve IP'nin itibarına bağlıdır, yalnızca tür etiketine değil. Bir proxy tek başına coğrafya veya hesap uygunluğu vermez.

Satın almadan önce seçtiğiniz tarifenin kodunuzun ihtiyaç duyduğu protokolü (HTTP veya SOCKS5) ve kimlik yöntemini (giriş veya IP izin listesi) desteklediğini doğrulayın. Tarayıcı otomasyonu başka bir yığındır; Playwright context'leri için Playwright proxy yazısına bakın. Katalogumuzda proxy geçidi olan sağlayıcılar:

Bright Data — residential ve datacenter proxy
Bright Data — residential ve datacenter proxy4.41442

Bright Data, veri toplama için büyük bir proxy ağıdır: yaklaşık 195 ülkede residential, mobil, ISP ve datacenter IP'ler. Residential trafik abonelik olmadan kullandıkça ödenebilir; datacenter ve ISP adresleri 10 IP'lik paketlerden başlar. Residential ve mobil erişim kimlik doğrulaması ister.

10 ülke
$5,00
1 GB başı
Oxylabs — residential ve datacenter proxy
Oxylabs — residential ve datacenter proxy4.0771

Oxylabs residential, mobil, ISP ve datacenter proxy'leri $30'dan tek aylık abonelik altında satar. Alıcı ödemeleri: kartlar, havale, AliPay, PayPal.

10 ülke
$0,45
1 GB başı
SOAX — residential ve mobil proxy
SOAX — residential ve mobil proxy3.8218

SOAX rotating residential ve mobil proxy'yi ortak kredi havuzunda satar; datacenter ve ISP aynı tarifelerde. Builder ayda $200 + KDV'dan başlar (200 kredi); Builder'da Tier 1 trafik $3/GB.

85 ülke
$3,00
1 GB başı
Decodo (Smartproxy) — residential ve datacenter proxy
Decodo (Smartproxy) — residential ve datacenter proxy4.22118

Decodo (eski adı Smartproxy) residential ve datacenter proxy satar. Residential: aylık tarife olmadan $4/GB veya 3 GB için $3.75/GB'dan aylık paketler. Ödeme: kart, PayPal, Alipay, Google/Apple Pay, kripto (sınırlı).

83 ülke
$0,38
1 GB başı

Python requests ile proxy nasıl kullanılır?

proxies argümanı olarak {"http": "http://host:port", "https": "http://host:port"} gibi bir dict geçin. Anahtarlar hedef URL'nin şemasıdır; değerler proxy URL'leridir. HTTP ile SOCKS karışmasın diye o değerlerde açık şema tercih edin. Şemasız sıradan bir host:port, Requests 2.34.2'de başına http:// eklenir; InvalidProxyURL diye reddedilmez.

requests proxy'sine kullanıcı adı ve parola nasıl eklenir?

Onları proxy URL'sine koyun (http://user:***@host:port), her iki parçayı urllib.parse.quote(value, safe="") ile yüzde kodlayın ve sabit kodlamak yerine bir sır yöneticisinden yükleyin. Çözüldükten sonra HTTP Basic user-id iki nokta içeremez (RFC 7617); parola içerebilir. Kullanıcı adına iki nokta koymak için yüzde kodlanmış iki noktaya güvenmeyin.

Python requests neden 407 Proxy Authentication Required döndürür?

Proxy, almadığı veya kabul etmediği kimlik bilgilerini ister. Kimlik bilgisi olmadan gönderilen bir istekte 407 yalnızca meydan okumadır. Aksi halde kodlama, kullanıcı adı biçimi ve tarife durumunu kontrol edin. HTTPS hedefler 407'den bahseden ProxyError yükseltir; HTTP hedefler 407 yanıtı döndürür. Kapalı bir porttan gelen gibi 407'siz ProxyError bağlantıya işaret eder. HTTPProxyAuth laboratuvarımızda HTTP'yi kimlik doğruladı, HTTPS CONNECT'i değil.

requests SOCKS5 proxy destekler mi?

Evet, python -m pip install "requests[socks]" sonrası. Ana bilgisayar adlarını proxy'nin çözmesi için socks5h://, yerelde çözmek için socks5:// kullanın. Laboratuvarda socks5 example.com için bir IPv4 adresi, socks5h ana bilgisayar adını teslim etti.

requests HTTP_PROXY ortam değişkenini kullanır mı?

Evet, proxies geçmezseniz: http_proxy, https_proxy, all_proxy ve no_proxy okur. Sıradan bir süreçte büyük harfli adlar da çalışır. REQUEST_METHOD ayarlıysa (CGI), urllib HTTP için HTTP_PROXY'yi yok sayar ki bir Proxy başlığı onu enjekte edemesin; küçük harfli http_proxy yine uygulanabilir. Bu curl'ün yalnızca küçük harfli HTTP kuralı değildir. Ortam proxyleri Session.proxies'i ezebilir, bu yüzden çağrı başına proxies geçin veya session.trust_env = False koyun. NO_PROXY yalnızca ortam proxylerini atlar; açık bir proxies= dict o ana bilgisayarları yine kapsayabilir.

Proxy üzerinden requests için hangi zaman aşımını koymalıyım?

Her zaman bir tane koyun; Requests'in varsayılanı yoktur. (3.05, 27) gibi bir demetle başlayın ve gerçek proxy ucunuzdaki yanıt sürelerini ölçtükten sonra ayarlayın. Proxy'ye bağlanma zaman aşımı ConnectTimeoutError saran ProxyError olarak yüzeye çıkabilir; bağlandıktan sonra sessiz origin ReadTimeout'tur.

Proxy HTTPS'i bozuyorsa verify=False koymalı mıyım?

Hayır. Araya giren proxy'nin CA'sına verify= veya REQUESTS_CA_BUNDLE ile güvenin. verify=False herhangi bir sertifikayı kabul eder ve ana bilgisayar adı uyuşmazlıklarını yok sayar. Laboratuvarda kendi imzalı origin varsayılan doğrulamada başarısız oldu ve yalnızca laboratuvar CA'sı verify='e geçilince geçti.