urllib3로 프록시 IP 사용하기
HTTP 프록시에는 ProxyManager를 고르고 urllib3 응답 필드, 재시도, SOCKS 전용 관리자를 확인하세요.
간단한 urllib3 프록시 진단에는 재시도를 끈 ProxyManager를 사용하세요. 작동을 멈춘 항목을 계속 재시도하며 기다리는 대신 첫 시도 결과를 보고합니다. uv가 관리하는 프로젝트에서는 다음과 같습니다.
uv add urllib3문서용 엔드포인트를 자신의 서비스나 HTTP 프록시 목록의 HTTP 프록시로 바꾸고 해당 관리자를 통해 요청하세요.
import urllib3
proxy = urllib3.ProxyManager(
"http://203.0.113.10:8080",
timeout=urllib3.Timeout(connect=5, read=10),
retries=False,
)
try:
response = proxy.request("GET", "https://example.com/")
print(response.status)
print(response.data.decode("utf-8", errors="replace")[:200])
finally:
proxy.clear()
먼저 response.status를 읽고 이어 response.data를 확인하세요. 이것이 urllib3의 필드입니다. Requests 방식의 status_code와 text는 대체물이 아닙니다. 웹사이트 거부 응답은 정상 프록시를 통해서도 도착할 수 있습니다. 반면 응답 전 예외는 요청을 완료하지 못했음을 뜻합니다.
retries=False는 진단용 선택이며 운영 환경의 재시도 정책이 아닙니다. 연결 5초와 읽기 10초는 각 단계를 제한하며 총 15초 내 완료를 보장하지 않습니다. DNS와 응답 진행도 전체 대기 시간에 영향을 줄 수 있습니다.
예제는 본문을 미리 읽고 마지막에 관리자의 풀을 비웁니다. 같은 엔드포인트로 반복 요청한다면 연결 재사용을 위해 작업이 끝날 때까지 관리자를 유지하세요. preload_content=False로 바꾸면 수명 주기가 달라집니다. 호출자가 스트리밍 응답을 읽고 해제해야 합니다.
수신 서비스에 맞는 관리자를 고르세요. 일반 PoolManager는 다른 곳에 URL을 저장했다고 프록시를 인식하지 않습니다. SOCKS는 urllib3.contrib.socks.SOCKSProxyManager와 선택적 종속성을 사용합니다. 위 코드는 HTTP ProxyManager 경로를 따릅니다.