빠른 답변
프록시에서 Read timed out (ReadTimeout)는 무엇을 의미하나요?
읽기 시간 초과는 클라이언트가 응답 다음 바이트를 읽기 제한 시간보다 오래 기다렸다는 의미입니다. CrawlRelay 주거용 프록시를 사용하면 주로 느린 대상 서버 또는 느린 홈 ISP가 지연 원인입니다. 접속 및 읽기 제한 시간을 각각 설정하세요. HTML 페이지 기준 접속 약 10초, 읽기 30~60초가 적절하며, 제한 시간 초과 시 한 번 새 연결에서 재시도하세요.
Read timed out (ReadTimeout) 한눈에 보기
| 오류 | Read timed out (ReadTimeout) |
|---|---|
| 유형 | 클라이언트 타임아웃 오류 |
| 전송 주체 | HTTP 클라이언트가 읽기 제한 시간 내에 데이터를 받지 못할 때 |
| 정의 위치 | Client setting, no protocol status |
| 다시 시도할까요? | 예, 새 출구에서 1~2회 가능 |
| 먼저 확인하세요 | 읽기 제한 시간과 대상 서버의 정상 응답 시간 비교 |
Read timed out (ReadTimeout)가 무엇을 의미하나요?
클라이언트는 통상 두 개 타이머가 있습니다. 접속 제한 시간은 프록시와 연결을 열 때까지 대기하는 최대 시간을 정합니다. 읽기 제한 시간은 요청을 보낸 후 다음 바이트 사이의 최대 대기 시간을 의미합니다. 따라서 읽기 제한 시간 초과는 연결은 되었으나 응답이 너무 늦다는 뜻입니다.
명시적 제한 시간이 없으면 일부 클라이언트는 영원히 대기합니다. Python requests의 기본 제한 시간은 없으므로, 한 번 막히면 워커가 멈출 수 있습니다.
Python, curl, Node.js, 브라우저에서 a read timeout는 어떻게 나타나나요?
같은 실패가 도구마다 다르게 출력됩니다. 로그에서 검색할 메시지들:
- Python requests:
ReadTimeout: HTTPSConnectionPool(...): Read timed out. (read timeout=10) - httpx:
httpx.ReadTimeout - Node.js:
ETIMEDOUT,ESOCKETTIMEDOUT또는 자체 타이머AbortError - Playwright:
TimeoutError: page.goto: Timeout 30000ms exceeded
a read timeout의 원인은 무엇인가요?
가장 가능성 높은 첫 번째 원인:
- 느린 대상 페이지, 검색 결과 또는 무거운 동적 페이지 등
- 느린 출구 연결: 가정 업로드 속도, 와이파이, 트래픽 많은 모바일 셀
- 한 번에 읽는 큰 다운로드 (스트리밍 처리 아님)
- 페이지 유형에 비해 지나치게 짧은 제한 시간
- 네트워크 유휴를 기다리는 브라우저 페이지 (추적기 끊임없이 로딩하는 사이트)
a read timeout를 단계별로 진단하는 방법은?
- 프록시 없이 요청 시간을 측정해 기본값을 확인하세요.
- 첫 바이트 도착 시간과 전체 소요 시간을 별도 기록하세요.
- 느린 URL의 응답 크기를 점검하세요.
- 브라우저에서는 사용하는
waitUntil조건을 확인하세요.
# 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_URLa read timeout를 어떻게 고치나요?
- 접속 제한 시간과 읽기 제한 시간 모두 설정: 접속 약 10초, HTML 읽기 30~60초 이상, 큰 파일은 더 길게 설정하세요.
- 큰 응답은 스트리밍 처리하여 부분별로 디스크에 저장하세요.
- Playwright에서는 HTML만 필요하면 네트워크 유휴 대신
domcontentloaded를 사용하세요. - 브라우저에서 필요 없는 무거운 리소스(예: 비디오) 차단하세요.
- 제한 시간 초과 시 새 연결에서 한 번 재시도하고, 이후에는 느린 작업 큐로 이동하세요.
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...a read timeout 이후에 다시 시도해야 하나요?
읽기 제한 시간이 초과되면 새 연결에서 1~2회 재시도하세요. 같은 URL에서 지속적으로 제한 초과 시 전체 제한 시간을 늘리는 대신 별도 느린 큐에 배치하는 것이 좋습니다. 부작용이 중복되지 않게 GET처럼 안전한 요청만 재시도하세요.
Read timed out (ReadTimeout)가 CrawlRelay에 어떻게 적용되나요?
CrawlRelay의 각 연결은 세션 ID 없이 연결하면 다른 주거용 출구를 사용하므로 재시도는 다른 홈 연결도 테스트하는 셈입니다. 느린 출구가 있다면 세션 고정 시간을 짧게 유지하세요. 그렇지 않으면 세션 내 모든 요청이 느려집니다.
게이트웨이: gw.crawlrelay.com, 포트 7777 (CONNECT를 통한 HTTP, HTTPS) 및 포트 7778 (SOCKS5). 사용자 이름 형식: USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. 관련: 504 게이트웨이 타임아웃 · 연결 재설정 · 동시성 가이드.
Read timed out (ReadTimeout): 개발자들이 묻는 질문들
프록시를 사용할 때 어떤 타임아웃을 설정해야 하나요?
HTML 페이지 기준 접속 약 10초, 읽기 30초로 시작해서 측정 결과에 따라 조정하세요. JSON API는 더 빠르며, 큰 파일·느린 검색 페이지는 더 긴 시간이 필요합니다. Python requests는 기본 제한 시간이 없으니 명시적으로 설정하세요.
타임아웃 설정에도 트래픽이 발생하나요?
타임아웃 전까지 전송된 바이트에 대해서만 트래픽이 발생합니다. 첫 바이트를 기다리다 타임아웃되면 거의 전송된 데이터가 없습니다. 큰 다운로드에서 중간에 타임아웃되면 일부 데이터가 전송된 것입니다. 대용량 파일은 스트리밍하고 가능한 경우 중단 지점부터 재개하세요.
타임아웃이 한 번에 몰려 발생하는 이유는 무엇인가요?
대상 서버가 부하에 따라 느려져서 발생하는 경우가 많으며, 때로는 귀하의 부하 때문일 수도 있습니다. 여러 출구를 동시에 통한 급증은 대상 서버 문제를 가리키고, 단일 타임아웃은 특정 느린 출구를 의미합니다. 급증이 시작될 때 호스트의 동시 접속 수를 줄이십시오.
이 참조에서 다른 프록시 오류들
HTTP 상태 코드
- 401 Unauthorized vs 407
- 403 Forbidden
- 407 Proxy Authentication Required
- 429 Too Many Requests
- 502 Bad Gateway
- 503 Service Unavailable
- 504 Gateway Timeout
브라우저 및 클라이언트 오류
연결 및 TLS 오류
실패 사례를 다루는 문서가 있는 레지덴셜 프록시들
US$0.50/GB의 레지덴셜 프록시 CrawlRelay개, 트래픽이 절대 만료되지 않음.