HTTPX proxy kurulumu: kimlik doğrulama, ortam ve zaman aşımları

12 dk

HTTPX proxy'sini proxy= ile ayarlayın, kimlik bilgilerini geçin, HTTPS'i CONNECT'te tutun ve ortam varsayılanlarını açık mount'lar ile zaman aşımlarından ayırın.

Python geliştiricileri, HTTPX 0.28.1'in bir HTTP veya SOCKS5 proxy üzerinden çıkması gerektiğinde bu rehber içindir. Özel editöryal kontroller satıcı hesabı değil, loopback origin'ler ve sahte bir CONNECT proxy kullandı. Ücretsiz anahtar yok; Top Proxy IP satmaz. Bu kontroller yalnızca o laboratuvar yolunu kanıtlar. Herkese açık bir indirme değildir.

01proxy= ile bir istek yönlendirin

Kurulu istemci proxy='yi httpx.get ve httpx.Client üzerinde alır. Eski HTTPX ayrıca URL kalıplarından proxy URL'lerine bir proxies= eşlemesi de kabul ederdi. O, yalnızca Requests'e özgü bir dict değil, HTTPX'in kendisiydi. HTTPX 0.28.0 (28 Kasım 2024) kullanımdan kaldırılmış proxies argümanını sildi. Bu anlatım 0.28.1 proxy= ve mounts= üzerinde kalır. Tek proxy biçimi bir URL dizgesi veya bir httpx.Proxy nesnesidir.

HTTP proxyler (erişim 14 Ekim 2026) o URL'yi istemci başlatmada veya üst düzey yardımcılarda geçirdiğinizi söyler. Tek bir proxy="http://127.0.0.1:PORT" hem HTTP hem HTTPS'i o hop'tan gönderir. HTTPS'in https:// proxy URL'sine ihtiyacı yoktur. Hedef şema ile proxy şema ayrı düğmelerdir.

  1. Gerçekten içe aktaracağınız istemciyi sabitleyin. Bu anlatım HTTPX 0.28.1, httpcore 1.0.9 ve Python 3.14.6 kullandı.
  2. proxy= HTTP proxy URL'sine ayarlı bir Client kurun. Açık yolu kanıtlarken trust_env=False bırakın ki artakalan kabuk değişkenleri yolu çalamasın.
  3. Kontrol ettiğiniz bir HTTP origin çekin. Yalnızca durum kodunu değil, proxy günlüğünü okuyun. Laboratuvarın sahte ileticisi GET http://httpx-lab.origin:<port>/ kaydetti, authorized: true ile.
  4. İstemciyi bir bağlam yöneticisiyle kapatın. Bu, taşıma havuzunu kapatır. Unutulan bir istemci sızdırılmış bir sokettir, daha hızlı bir betik değil.

Doğrudan taban çizgisi önemlidir. Bir çocuk süreçte HTTP_PROXY, HTTPS_PROXY, ALL_PROXY ve NO_PROXY temizlendikten sonra proxy= olmayan bir istemci HTTP origin'e çarptı ve sahte proxy boş durdu. Bu, proxy'siz kontroldür. O değişkenler hâlâ ayarlıyken HTTPX'in ne yapacağını söylemez. O sonra gelir.

İki çıkış gerekiyorsa iki URL'yi proxy= içine tıkmayın. Kalıp başına HTTPTransport(proxy=...) ile mounts kullanın ve verify, trust_env ve retries'i her taşımaya koyun. İstemci düzeyindeki verify= argümanı bu yapıda birlikte gitmedi. Yalnızca Client(verify=ctx) devralan bir mount TLS'de ConnectError / SSLCertVerificationError ile düştü: unable to get local issuer certificate. Aynı istek, taşımanın kendisi verify=ctx aldığında geçti.

02HTTPS hedef için bir HTTP proxy seçin

İnsanlar buna «HTTPS proxy» der çünkü site https://'dir. Öndeki hop yine CONNECT konuşan bir HTTP proxy'dir. Belgeler bunu tuzak diye belirtir: mounts dict'teki https:// anahtarı hedef şemadır ve önündeki proxy URL'si genellikle http://'dir.

İletme ile tünelleme aynı mekanizma değildir. http:// için proxy origin isteğini yapar ve origin baytlarını döndürür. https:// için istemci CONNECT host:443 gönderir, proxy TCP açar ve TLS o tünelden istemci ile origin arasında koşar. Çalışan bir bayt tüneli olmadan CONNECT'ten sahte bir 200, HTTPS proxy değildir. Laboratuvar HTTP'de gerçek origin gövdelerini ve CONNECT sonrası gerçek TLS baytlarını iletti.

  1. Hedef https://httpx-lab.origin:<port>/ olsa bile proxy URL'sini http://127.0.0.1:<port> üzerinde tutun.
  2. Origin'e ssl.create_default_context(cafile=ca.pem) ile güvenin ve o bağlamı verify= olarak geçin. Doğrulamayı kapatmayın.
  3. 200'ü kutlamadan önce proxy günlüğünün CONNECT httpx-lab.origin:<https-port> gösterdiğini doğrulayın.
  4. Varsayılan CA deposu ve laboratuvar CA'sı olmadan bir kez tekrarlayın. CONNECT'i yine kaydeden bir TLS hatası istersiniz.

Atlanan adım sonuncusudur. Bu çalıştırmada CONNECT geçti, sonra HTTPX SSLCertVerificationError saran ConnectError yükseltti: unable to get local issuer certificate. Tünel sağlamdı. Sertifika değildi. Bir tarayıcı IP adresim sayfası tarayıcının çıkışını gösterirdi, bu istemciyi değil. HTTPX'i işaret etmeden önce bir ana bilgisayarın HTTP veya SOCKS5 yanıtlayıp yanıtlamadığını görmek için proxy kontrolü kullanın.

SOCKS5 üçüncü yoldur. pip install httpx[socks] socksio 1.0.0 çekti. 0.28.1'de httpx.Proxy socks5 ve socks5h kabul eder. Kontrollü bir SOCKS5 düzeneğine karşı socks5://127.0.0.1:<port> http://127.0.0.1:<origin>/'e ATYP ipv4 gönderdi. Aynı istemci socks5h:// ve bir ana bilgisayar adı hedefiyle ATYP domain httpx-lab.origin gönderdi. O ana bilgisayar adıyla socks5:// kullanmak da ATYP domain gönderdi. Bu yapı, kimi curl socks5 kurulumlarının yaptığı gibi ana bilgisayar adını yerelde çözüp sonra bir IPv4 adresi göndermedi. Requests'ten socks5h folklorunu HTTPX'e kopyalamayın. El sıkışmasını ölçün.

03Proxy kimlik doğrulamasını ayarlayın

Proxy kimlik bilgileri auth= değildir. auth= origin kimlik doğrulamasıdır. Karıştırırsanız bir saat yanlış hop'u ayıklarsınız.

Proxyler sayfası userinfo'yu proxy URL'sine koyar. API ayrıca httpx.Proxy(url, auth=(user, password)) belgeler. İkisi de laboratuvarda çalıştı. Sahte parola @, :, /, # ve % içeriyordu. Bu karakterler userinfo'ya yalnızca bileşen bazında URL kodlamadan sonra aittir veya URL ayrıştırmasından hiç geçmeyen Proxy üzerindeki auth= demetine. Günlükler ve figürler değeri kararttı. Ayıklarken Proxy-Authorization yazdırmayın.

Eksik ve yanlış kimlik bilgileri tek davranış değildir.

HTTP iletmede, proxy kullanıcısı olmayan bir istek düzeneğinden HTTP 407 döndü. HTTPX bunu status_code == 407 olarak yüzeye çıkardı. Yanlış parola aynı şeyi yaptı. Düzenek authReason: missing ve authReason: wrong kaydetti. İstisna yok. Sarmalayıcınız sonra fırlatırsa 407'yi tutun.

HTTPS CONNECT'te aynı eksik veya yanlış sahte kimlik bilgileri 407 Proxy Authentication Required iletisiyle httpx.ProxyError yükseltti. Okunacak bir yanıt nesnesi yoktu. CONNECT bir tünel kurulumudur. Oradaki 407 bir origin sayfası değil, bir taşıma hatasıdır.

Doğru kimlik bilgileri her iki yolda da origin 200 döndürdü. Origin Proxy-Authorization hiç görmedi. O başlık proxy hop'unda kalır. Origin Basic de gerekiyorsa istemcide auth=(origin_user, origin_pass) gönderin. Laboratuvarın /origin-auth yolu o olmadan 401, her iki hop kimlik doğrulanınca 200 döndürdü.

  1. Parolada ayrılmış karakterler varken proxy kullanıcı ve parolasını httpx.Proxy(..., auth=(user, password)) içine koyun.
  2. Origin auth='i site için tutun, proxy için değil.
  3. HTTP 407 ile CONNECT ProxyError'ı farklı sonuçlar sayın. Gerçekten yakaladığınız sınıfı kaydedin.
  4. «curl'de çalışıyor»nun HTTPX'in aynı başlığı gönderdiğini kanıtladığı fikrini reddedin. Bunu bu istemcide kanıtlayın.

Residential ürünler aynı ayrımı belgeler. Oxylabs Residential Proxies (erişim 14 Ekim 2026) HTTP, HTTPS, HTTP/3 ve SOCKS5 listeler; kullanıcı adı/parola veya IP izin listesi ve customer-USERNAME:PASSWORD ile giriş pr.oxylabs.io:7777. Bu belgelenmiş bir uç şeklidir, havuzlarının testi değil. Decodo residential hızlı başlangıç (aynı gün) gate.decodo.com:7000 ve hem http hem https'i tek bir HTTP proxy URL'sinden gönderen bir Python eşlemesi gösterir. İngilizce katalog o ürünü hâlâ smartproxy-com diye listeler. Belgelerdeki genel ad Decodo'dur. Yol değişmedi.

04Ortam varsayılanlarını ve mount'ları anlayın

HTTPX ortamı varsayılan olarak okur. Ortam değişkenleri (erişim 14 Ekim 2026) HTTP_PROXY, HTTPS_PROXY, ALL_PROXY ve NO_PROXY ile SSL_CERT_FILE ve SSL_CERT_DIR listeler. trust_env=False o kümenin tamamını kapatır. «Sertifika kontrollerini atla» demek değildir.

Çocuk laboratuvar süreci bu değişkenler silinmiş, artı CGI artıkları, REQUESTS_CA_BUNDLE, CURL_CA_BUNDLE ve SSLKEYLOGFILE ile başladı. Boş özel bir NETRC dosyası kullandı. İş istasyonu HOME'una dokunulmadı. Her ortam deneyi o taban çizgisinden başladı ve yalnızca adlı sahte değerler enjekte etti.

Loopback atlama size yalan söyler. HTTP istemcileri 127.0.0.1'i sık atlar. Ortam-proxy durumları ana bilgisayar adı httpx-lab.origin ve NO_PROXY="" kullandı; o adı loopback'e eşleyen kapsamlı bir getaddrinfo yamasıyla. O yama enjekte edilmiş çözümleyici davranışıdır. Genel DNS ölçümü değildir.

  1. HTTP_PROXY ve HTTPS_PROXY'yi kodlanmış proxy URL'sine dışa aktarın. Hedef proxy kullanmak zorundaysa NO_PROXY'yi boş dizge yapın.
  2. proxy= argümanı olmadan Client(trust_env=True) kurun. Laboratuvar isteği 200 döndürdü ve yalnızca proxy alpha GET'i kaydetti. Proxy bravo boş durdu.
  3. NO_PROXY=httpx-lab.origin ile tekrarlayın. Origin yine 200 döndürdü. Alpha o GET'i görmedi. Bu atlamadır ve varsaydığınız bir yan etki değil, ayrı bir durumdur.
  4. Aynı ortam değişkenleri ve trust_env=False ile tekrarlayın. İstek doğrudan gitti. Alpha hiçbir şey görmedi.

Açık proxy= çelişen bir ortamı yendi. HTTP_PROXY'de alpha ve proxy= bravo'yu gösterirken bravo GET'i aldı, alpha almadı. Yalnızca durum 200 hangi hop'un kullanıldığını söylemezdi. İki ayrı, günlüğe yazan kimlik söyledi.

trust_env=False ayrıca SSL_CERT_FILE'ın istemci CA deposu olmasını da durdurdu. Laboratuvar CA'sı SSL_CERT_FILE'da ve trust_env=True iken laboratuvar origin'ine HTTPS 200 döndürdü. trust_env=False ve varsayılan verify=True ile aynı URL ConnectError / SSLCertVerificationError yükseltti. O trust_env=False istemcisine verify=ssl.create_default_context(cafile=ca.pem) geçirmek 200'ü geri getirdi. Doğrulama açık kaldı. Yalnızca ortam bakışı gitti.

transport= ve mounts= farklı kurucu argümanlarıdır. HTTPX 0.28.1 allow_env_proxies = trust_env and transport is None ayarlar. Özel bir transport= nesnesi ortam proxy mount'larını atlar. Bir mounts= dict'i atlamaz. İstemci önce ortam mount'larını kurar, sonra o haritayı sizin mount'larınızla günceller. Daha özgül URL kalıpları kazanır. HTTP_PROXY'den http://, all://'yi yener; bu yüzden Client(mounts={"all://": some_transport}, trust_env=True) HTTP hedeflerini hâlâ devralınan proxy üzerinden gönderebilir. Ortam yönlendirmesi dışlanmalıysa trust_env=False ayarlayın. proxy= ve verify='yi her mount edilmiş HTTPTransport'a koyun. İstemci düzeyindeki verify= o taşımalara yine kopyalanmaz. Son kaçırma, güvenilmeyen-CA hatasının nasıl geri sızdığıdır.

05Senkron ve asenkron yaşam döngüsünü deneyin

Senkron ve asenkron iki istemcidir. proxy= şeklini paylaşırlar. Bir bağlantı havuzu paylaşmazlar.

with httpx.Client(proxy=..., verify=ctx) as client: senkron biçimdir. Kapatma bağlam çıkışında olur. async with httpx.AsyncClient(proxy=..., verify=ctx) as client: asenkron biçimdir. await client.get(...) yaparsınız. Asenkron istemci içinde await olmadan get karıştırmak bir zaman aşımı değil, bir hatadır.

Bu laboratuvardaki asenkron durum aynı HTTP proxy URL'si ve laboratuvar SSL bağlamıyla AsyncClient kullandı. await client.get(https_url) HTTPS origin işaretiyle 200 döndürdü. Proxy CONNECT kaydetti. Bu, başarılı bir asenkron tüneldir. Eşzamanlılık kıyaslaması değildir ve yük altında havuz yeniden kullanımı hakkında bir şey söylemez.

Mount edilmiş taşımalar aynı kapatma yoluna ihtiyaç duyar. Elle oluşturulan HTTPTransport, istemci onu mounts üzerinden sahiplendiyse istemci tarafından kapatılır. Bir taşıma değişkenini istemciler arasında canlı tutarsanız finally içinde transport.close() çağırın. Laboratuvar bunu yeniden deneme ve mount durumlarında yaptı.

Yeniden denemeler taşımaya aittir. Taşımalar (erişim 14 Ekim 2026) HTTPTransport(retries=...)'in ConnectError ve ConnectTimeout yeniden denediğini söyler. 429 veya 503 yeniden denemez. Laboratuvar retries=2 ayarladı ve /status/503 çekti. Origin bir vuruş saydı. HTTPX 503 döndürdü. Bu urllib3 Retry değildir. allowed_methods folklorunu HTTPX'e yapıştırmayın.

06Bağlantı, gövde okuma ve TLS hatalarını teşhis edin

Yakaladığınız istisnayı adlandırın. HTTPX'in gerçek bir hiyerarşisi vardır. Her şeyi «proxy hatası»na yığmak, başarısız hop'u gizler.

Kapalı bir loopback dinleyici ConnectionRefusedError saran ConnectError üretti: [Errno 61] Connection refused. Bu bir reddir. Bağlanma zaman aşımı değildir. Bu Darwin çekirdeğinde bağlı tutulan ama dinlemeye alınmayan bir soket reddetmedi. HTTPX yapılandırılmış bağlanma süresinden sonra TimeoutError saran ConnectTimeout yükseltti. O bekleme, listen olmadan bind için enjekte-düzenek davranışı diye etiketlenir. Genel internet ölçümü değildir.

Okuma zaman aşımları, yanıt başladıktan sonraki parçalar hakkındadır. Origin /slow-body tam başlıkları hemen gönderdi, bir gövde baytı yazıp flush etti, sonra Timeout(read=0.45)'ten uzun bekledi. Gövdeyi akıtırken HTTPX durum 200 döndürdü, ilk bayt olayı ateşlendi, bir bayt geldi, sonra TimeoutError saran ReadTimeout. Başlıklar zaten inmişti. ConnectError yanlış sınıf olurdu. ConnectTimeout yanlış sınıf olurdu. Yalnızca response.text çağırır, akıtmazsanız yine zaman aşımına uğrarsınız ama başlıkların indiği kanıtını kaybedersiniz.

CONNECT sonrası TLS hataları SSLCertVerificationError ile ConnectError kaldı. Proxy tüneli zaten kabul etmişti. verify=False bunu gizler. Yapmayın.

İş ISP atanmış bir çıkışsa mobil proxy veya Residential proxy kullanın. Protokol desteği ile IP kökeni ayrı boyutlardır. Bu laboratuvar bir ülke, bir başarı oranı veya bir hesap iddia etmedi.

Başarısızlık0.28.1 laboratuvarının yükselttiğiOlmadığı şey
HTTP proxy, eksik veya yanlış BasicYanıt durumu 407Bir CONNECT istisnası
HTTPS CONNECT, eksik veya yanlış BasicProxyError («407 Proxy Authentication Required»)Bir origin 407 sayfası
Laboratuvar CA'sı olmadan laboratuvar HTTPSCONNECT sonrası ConnectError / SSLCertVerificationErrorCONNECT'in hiç olmadığı kanıtı
Kapalı loopback portConnectError / ConnectionRefusedErrorConnectTimeout
Darwin'de listen olmadan bindConnectTimeout (düzeneğe özgü bekleme)Bir red veya bir WAN RTT
İlk bayttan sonra gecikmeli gövdeiter_bytes() yinelenirken ReadTimeoutBir bağlanma hatası
retries=2 ile origin /status/503Durum 503, bir origin vuruşuBir uygulama yeniden denemesi
14 Ekim 2026'daki HTTPX 0.28.1 loopback laboratuvarından iddia tablosu

Şekil bu çalıştırmanın iddia tablosudur. Kapak görseli değildir ve bir kontrol arayüzü ekran görüntüsü değildir.

Sonraki blok şematik bir API eskizidir. Portlar, CA yolu ve parola kontrol ettiğiniz değerlerle değiştirdiğiniz yer tutuculardır. Herkese açık bir düzenek paketi değildir ve boş bir dizinden çalışmaz.

import httpx
import ssl

# PLACEHOLDERS. Do not treat these literals as lab values.
ctx = ssl.create_default_context(cafile="PATH/TO/LAB_CA.pem")
proxy = httpx.Proxy(
    "http://127.0.0.1:PROXY_PORT",
    auth=("PROXY_USER", "PROXY_PASSWORD"),
)
timeout = httpx.Timeout(5.0, connect=2.0, read=0.45)

with httpx.Client(proxy=proxy, verify=ctx, trust_env=False, timeout=timeout) as client:
    http_response = client.get("http://TARGET_HOST:HTTP_PORT/")
    https_response = client.get("https://TARGET_HOST:HTTPS_PORT/")

Bu yazıdaki 0.28.1 istisna sınıfları ve CONNECT ile 407 sonuçları özel bir editöryal düzenekten gelir. O düzenek burada yayımlanmaz. python -m pip install "httpx[socks]==0.28.1" ile içe aktarabileceğiniz bir istemci kurun; httpcore 1.* ve SOCKS için socksio'ya bağlıdır. HTTP proxy ana bilgisayarınızı, portunuzu ve kimlik bilgilerinizi yer tutuculara koyun; parolada ayrılmış karakterler varken httpx.Proxy(..., auth=(user, password)) kullanın. HTTP URL'sini iletme için kontrol ettiğiniz bir origin'e, HTTPS URL'sini CONNECT sonra TLS için kontrol ettiğiniz bir origin'e işaret edin. HTTPS için verify= olarak o origin için zaten güvendiğiniz bir CA dosyasıyla ssl.create_default_context(cafile=...) geçin. Açık proxy= yolunu kanıtlarken trust_env=False tutun. verify=False ayarlamayın.

07Belgelenmiş bir uç seçin

İstemci yolu dürüst olunca HTTP iletme ve CONNECT belgelendiren bir giriş ana bilgisayarı seçin. Oxylabs ve Decodo (hâlâ smartproxy-com diye listelenir) için İngilizce katalog sayfaları 14 Ekim 2026'da canlı self-canonical URL'ler döndürdü. Resmi belgeleri kullanıcı adı/parola veya izin listeli IP ile HTTP geçitlerini anlatır. Bu kâğıt üzerinde uç uyumudur. Bu yazı iki ürüne de giriş yapmadı ve onları sıralamaz.

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şı
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şı

Yalnızca tarayıcı onayı gerekiyorsa IP adresim üzerinde kalın. HTTPX gerekiyorsa bu kütüphanenin proxy günlüğüne ve istisna sınıfına inanın. İkisi, blog yazılarının kabul ettiğinden daha sık anlaşmaz.

HTTPX proxy nasıl ayarlanır?

proxy= argümanını httpx.Client veya httpx.get'e geçin. Bir URL dizgesi veya httpx.Proxy kullanın. HTTPX 0.28.1'de proxies= argümanı yoktur. HTTPX o kullanımdan kaldırılmış eşlemeyi 0.28.0'da sildi. Şema başına yönlendirme için her biri kendi proxy ve verify argümanlarını alan HTTPTransport nesneleri mount edin. mounts= trust_env=True iken ortam kalıplarını yine birleştirir. Devralınan HTTP_PROXY uygulanmamalıysa transport= veya trust_env=False kullanın.

HTTPS işleyen bir proxy için neden http:// kullanılır?

Proxy hop'u genellikle düz HTTP'dir. HTTPS hedefler o hop üzerinden CONNECT kullanır, sonra origin'e TLS. mounts'taki https:// anahtarı hedef şemadır. Önündeki proxy URL'si, ürün gerçekten proxy'nin kendisine TLS konuşmuyorsa http:// kalır.

Proxy kimlik bilgileri auth='den nasıl ayrılır?

Proxy userinfo veya httpx.Proxy(auth=(user, password)) Proxy-Authorization'ı proxy'ye gönderir. auth= origin kimlik doğrulamasıdır. Laboratuvar proxy kimlik bilgileri yanlışken proxy 407 veya ProxyError, yalnızca origin kimlik bilgileri eksikken origin 401 döndürdü.

trust_env=False sertifika doğrulamasını kapatır mı?

Hayır. trust_env=False HTTPX'in HTTP_PROXY, NO_PROXY, SSL_CERT_FILE ve SSL_CERT_DIR okumasını durdurur. TLS doğrulaması açık kalır. HTTPX origin kimlik bilgilerini trust_env doğru olduğu için netrc'den yüklemez. httpx.NetRCAuth'i kendiniz geçerseniz o kimlik trust_env=False ile yine uygulanır. Özel bir CA gerekiyorsa verify= olarak ssl.create_default_context(cafile=...) geçin. verify=False ortam işlemeyi açıp kapatan düğme değildir.

İstemci başlıklar indikten sonra neden ReadTimeout yükseltir?

Okuma zaman aşımı parça başına gövde süresidir. Laboratuvar origin'i başlıkları ve bir gövde baytı gönderdi, sonra durakladı. Akıtma durum 200 döndürdü, o baytı teslim etti, sonra ReadTimeout yükseltti. Bu ConnectTimeout değildir ve proxy ile konuşamama da değildir.

HTTPTransport 429 veya 503'ü yeniden dener mi?

Hayır. HTTPTransport üzerindeki retries yalnızca ConnectError ve ConnectTimeout yeniden dener. retries=2 ile laboratuvar origin /status/503 bir kez vuruldu ve HTTPX 503 döndürdü. Durum yeniden denemesi gerekiyorsa başka bir kütüphane kullanın.