Bez KYC — brak dowodu, selfie i dokumentów. Płać w kryptowalutach: BTC, USDT, USDC, ETH, SOL, LTC
Język: Polski
Rozpocznij

Referencja błędu proxy · Błędy połączenia i TLS

Timeout read przez proxy: przyczyny i sensowne limity

Błąd klienta: timeout: dokładny komunikat w każdym narzędziu, możliwe przyczyny w kolejności oraz działające rozwiązanie.

Ostatnia aktualizacja: · 4 min czytania

Szybka odpowiedź

Co oznacza Read timed out (ReadTimeout) w kontekście proxy?

Read timed out oznacza, że klient czekał dłużej niż ustawiony limit na kolejne bajty odpowiedzi. Przez residential proxy CrawlRelay opóźnienie zwykle pochodzi od wolnej strony lub wolnego wyjścia domowego. Ustaw osobno limity connect i read, około 10 i 30-60 sekund dla stron HTML, i powtórz żądanie po timeout tylko raz na nowym wyjściu.

Read timed out (ReadTimeout) w skrócie

BłądRead timed out (ReadTimeout)
TypBłąd klienta: timeout
Wysłane przezTwój klient HTTP, gdy nie dotarły dane przed upływem limitu czasu odczytu
Zdefiniowano wClient setting, no protocol status
Spróbować ponownie?Tak, raz lub dwa razy na nowym wyjściu
Najpierw sprawdźPorównaj limit czasu odczytu z normalnym czasem odpowiedzi celu

Co oznacza Read timed out (ReadTimeout)?

Klienci zwykle mają dwa timery. Connect timeout ogranicza czas oczekiwania na otwarcie połączenia z proxy. Read timeout ogranicza czas oczekiwania między bajtami po wysłaniu żądania. Read timeout oznacza, że połączenie powiodło się, ale odpowiedź była za wolna.

Bez ustawionych timeoutów niektóre klienty czekają w nieskończoność. W Python requests domyślnie timeout nie jest ustawiony, więc pojedynczy zacięty request może zawiesić pracownika.

Jak wygląda a read timeout w Python, curl, Node.js i przeglądarkach?

Ten sam błąd wyświetla się inaczej w każdym narzędziu. Oto komunikaty, które warto wyszukać w logach:

  • Python requests: ReadTimeout: HTTPSConnectionPool(...): Read timed out. (read timeout=10)
  • httpx: httpx.ReadTimeout
  • Node.js: ETIMEDOUT, ESOCKETTIMEDOUT lub AbortError z własnego timera
  • Playwright: TimeoutError: page.goto: Timeout 30000ms exceeded

Co powoduje a read timeout?

Najczęściej na początku:

  • Wolna strona docelowa, np. wyniki wyszukiwania lub ciężkie dynamiczne strony.
  • Wolne wyjście: prędkość uploadu w domu, Wi-Fi lub przeciążona sieć mobilna.
  • Duże pobrania czytane w jednym bloku zamiast strumieniowo.
  • Zbyt krótkie limity dopasowane do rodzaju strony.
  • Strony w przeglądarce czekające na sieciową bezczynność na witrynach, które nigdy nie przestają ładować trackerów.

Jak krok po kroku zdiagnozować a read timeout?

  1. Mierz czas zapytania bez proxy, by mieć bazę.
  2. Loguj czas do pierwszego bajtu i łączny czas osobno.
  3. Sprawdź rozmiary odpowiedzi dla wolnych URL.
  4. W przeglądarkach sprawdź, jakiego waitUntil używasz.
Przetestuj nie działający URL za pomocą curl (port HTTP, tryb verbose)
# Use the URL that fails; with https://api.ipify.org instead, you test the gateway alone.
# "HTTP/1.1 200 Connection established" first, then the site's own status: the site answered.
curl -v -x http://USERNAME:[email protected]:7777 https://TARGET_URL

# Same test through the SOCKS5 port, with DNS resolved at the exit
curl -v --socks5-hostname gw.crawlrelay.com:7778 --proxy-user USERNAME:PASSWORD https://TARGET_URL

Jak naprawić a read timeout?

  • Ustaw oba timery: connect około 10 sek., read 30-60 sek. dla HTML, więcej dla dużych plików.
  • Strumieniuj duże odpowiedzi i zapisz je na dysk częściami.
  • Użyj domcontentloaded zamiast network idle w Playwright, gdy potrzebujesz tylko HTML.
  • Blokuj ciężkie zasoby, których nie potrzebujesz, jak video, w przeglądarkach.
  • Powtórz raz na nowym wyjściu, potem przenieś URL do wolnej kolejki.
Python httpx: jawne ustawienie limitów connect, read, write i pool
import httpx

proxy = "http://USERNAME:[email protected]:7777"
timeout = httpx.Timeout(connect=10.0, read=30.0, write=10.0, pool=10.0)

with httpx.Client(proxy=proxy, timeout=timeout) as client:
    try:
        r = client.get("https://api.ipify.org")
        print(r.status_code, r.text)
    except httpx.TimeoutException as exc:
        print("timed out:", type(exc).__name__)  # ConnectTimeout, ReadTimeout...

Czy warto ponawiać próbę po a read timeout?

Retryuj read timeout raz lub dwa razy na nowym wyjściu. Jeśli ten sam URL ciągle timeoutuje, ustaw mu dłuższy timeout w oddzielnej wolnej kolejce zamiast podnosić timeouty globalnie. Uważaj na powtarzające się skutki uboczne: retryuj tylko bezpieczne do powtórzenia żądania, jak GET.

Jak Read timed out (ReadTimeout) odnosi się do CrawlRelay?

Każde nowe połączenie CrawlRelay bez ID sesji korzysta z innego residential exit, więc powtórka testuje też inne połączenie domowe. Ustaw krótkie sesje dla wolnych stron: jeśli wyjście jest wolne, każde żądanie w sesji będzie wolne.

Gateway: gw.crawlrelay.com, port 7777 (HTTP, HTTPS przez CONNECT) i port 7778 (SOCKS5). Format nazwy użytkownika: USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. Powiązane: 504 Gateway Timeout · Connection reset · Concurrency guide.

Read timed out (ReadTimeout): pytania, które zadają deweloperzy

Jakie timeouty ustawić przy scrapowaniu przez proxy?

Zacznij od około 10 sekund na połączenie i 30 sekund na odczyt dla stron HTML, a potem dostosuj według własnych pomiarów. API JSON są zwykle szybsze, duże pliki i wolne wyszukiwania potrzebują więcej. Ustaw timeouty jawnie: Python requests domyślnie nie ma timeoutu.

Czy timeout zużywa ruch?

Tylko dla bajtów przesłanych przed timeoutem. Żądanie timeoutujące przy oczekiwaniu na pierwszy bajt niemal nic nie przesłało. Duże pobranie, które timeoutuje w połowie, przesłało dane. Strumieniuj duże pliki i wznawiaj transfer, gdzie się da.

Dlaczego timeouty występują w falach?

Często dlatego, że cel zwalnia pod obciążeniem, czasem z powodu Twojego własnego obciążenia. Nagłe skoki na wielu wyjściach na raz wskazują na cel; odosobnione timeouty wskazują na pojedyncze wolne wyjścia. Zmniejsz współbieżność na hoście, gdy zaczyna się skok obciążenia.

Inne błędy proxy w tym odniesieniu

Kody statusu HTTP

Błędy w przeglądarce i kliencie

Błędy połączenia i TLS

Proxy rezydencjalne z dokumentacją opisującą przypadki błędów

CrawlRelay proxy rezydencjalne od 0,50 USD/GB, ruch, który nigdy nie wygasa.

Od 0,50 USD/GB · bez KYC

Rozpocznij