빠른 답변
프록시에서 Cannot connect to proxy (ProxyError)는 무엇을 의미하나요?
'프록시 연결 불가'는 래퍼 오류입니다: Python의 requests와 urllib3가 실제 원인을 내부에 담고 있습니다. 가장 안쪽 원인을 확인하세요. '연결 거부됨' 또는 시간 초과는 호스트, 포트 또는 네트워크 문제를 뜻하며; '해결 실패'는 DNS 문제; '터널 연결 실패: 407'은 인증 정보 문제입니다. CrawlRelay에서는 각각을 한 줄로 해결할 수 있습니다.
Cannot connect to proxy (ProxyError) 한눈에 보기
| 오류 | Cannot connect to proxy (ProxyError) |
|---|---|
| 유형 | 클라이언트 라이브러리 오류 (Python, Node.js) |
| 전송 주체 | 프록시와 통신 중 또는 전 HTTP 클라이언트 |
| 정의 위치 | Library error; read the nested cause for the real reason |
| 다시 시도할까요? | 중첩된 원인에 따라 다름 |
| 먼저 확인하세요 | 중첩 예외를 읽으세요: 거부, 타임아웃, 이름 확인 실패 또는 상태 코드 |
Cannot connect to proxy (ProxyError)가 무엇을 의미하나요?
urllib3는 프록시와 관련된 실패마다 하나의 ProxyError를 발생시키며, requests가 이를 전달합니다. 유용한 정보는 중첩 예외에 있으며, traceback이 긴 줄 끝에서 출력합니다.
Node.js 클라이언트는 다르게 동작합니다: 소켓 오류(예: ECONNREFUSED 또는 ETIMEDOUT)를 직접 보고하지만, 주소가 프록시임을 명시하지 않는 경우가 많습니다.
Python, curl, Node.js, 브라우저에서 'Cannot connect to proxy'는 어떻게 나타나나요?
같은 실패가 도구마다 다르게 출력됩니다. 로그에서 검색할 메시지들:
- 거부됨:
ProxyError('Unable to connect to proxy', NewConnectionError(... Connection refused)) - DNS:
NameResolutionError(... Failed to resolve ...)가ProxyError내에 있음 - 인증 정보:
OSError('Tunnel connection failed: 407 Proxy Authentication Required') - 게이트웨이 오류:
OSError('Tunnel connection failed: 502 Bad Gateway') - Node.js:
Error: connect ECONNREFUSED,ETIMEDOUT또는ENOTFOUND, 뒤이어 프록시 주소
'Cannot connect to proxy'의 원인은 무엇인가요?
가장 가능성 높은 첫 번째 원인:
- 프록시 URL의 잘못된 호스트 또는 포트
- 스킴 누락: 일부 라이브러리가
host:port에http://가 없으면 의외의 방식으로 해석함 - 네트워크 또는 서버의 아웃바운드 트래픽 차단
- CONNECT 단계에서 발생하는 인증 또는 게이트웨이 오류가 동일 예외로 감싸져 발현됨
HTTPS_PROXY같은 환경 변수가 이전 프록시를 가리키며 코드 설정을 덮어씀
'Cannot connect to proxy'를 단계별로 진단하는 방법은?
- 전체 예외를 출력하고 마지막 중첩 원인 확인
requests.utils.get_environ_proxies(url)또는HTTP_PROXY,HTTPS_PROXY,NO_PROXY환경 변수 출력하여 추가 설정 확인- 동일 기기에서 아래 curl 테스트 실행
- 원인을 아래 해결법 목록과 비교
# 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'Cannot connect to proxy'를 어떻게 고치나요?
- 거부됨 또는 시간 초과: 호스트와 포트를 수정하거나 게이트웨이로의 아웃바운드 트래픽을 열기
- 해결 실패: 기기에서 DNS 점검;
nslookup로 호스트 시도 - 407: 인증 정보를 수정하고 URL 인코딩; 407 Proxy Authentication Required 참조]
- 502 또는 504: 새 출구 노드에서 재시도; 502], 504 참조]
- 원치 않는 환경 프록시: requests에
session.trust_env = False설정하거나 환경 변수 정리
from urllib.parse import quote
import requests
user = "USERNAME-country-us"
password = "p@ss:word/1" # example containing special characters
# safe="" also encodes "/", "@" and ":" inside the credentials
proxy = "http://{}:{}@gw.crawlrelay.com:7777".format(
quote(user, safe=""), quote(password, safe="")
)
proxies = {"http": proxy, "https": proxy} # http:// for both keys
r = requests.get("https://api.ipify.org", proxies=proxies, timeout=(10, 30))
print(r.status_code, r.text)'Cannot connect to proxy' 이후에 다시 시도해야 하나요?
변경 가능한 네트워크 레벨 원인(시간 초과, 502/504 같은 게이트웨이 오류)만 재시도하세요. 연결 거부, DNS 실패, 407은 설정 변경 전까지 반복 발생하므로 치명적 오류로 처리하세요.
Cannot connect to proxy (ProxyError)가 CrawlRelay에 어떻게 적용되나요?
CrawlRelay에서는 HTTP 및 HTTPS 대상 모두에 대해 http://USERNAME:PASSWORD@ 뒤에 아래 게이트웨이 호스트 및 HTTP 포트를 붙여 프록시 URL을 구성합니다. requests의 http와 https 키에 동일한 http:// URL을 사용하세요: 스킴은 사이트가 아닌 프록시와 통신하는 프로토콜을 지정합니다.
게이트웨이: gw.crawlrelay.com, 포트 7777 (CONNECT를 통한 HTTP, HTTPS) 및 포트 7778 (SOCKS5). 사용자 이름 형식: USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. 관련: SSL: WRONG_VERSION_NUMBER · 407 · Python 가이드.
Cannot connect to proxy (ProxyError): 개발자들이 묻는 질문들
프록시에서 'Max retries exceeded with url' 메시지는 무슨 뜻인가요?
이는 urllib3가 재시도 한도 초과 후 포기했다는 의미이며, 이유는 메시지의 'Caused by' 부분에 나옵니다. 프록시가 있다면 그 부분은 보통 ProxyError이고, 중첩 원인은 연결 거부, 시간 초과, 이름 해석 실패 또는 407 같은 터널 상태입니다.
내가 설정하지 않은 프록시를 requests가 왜 사용하나요?
requests는 기본적으로 HTTP_PROXY, HTTPS_PROXY, NO_PROXY 환경 변수를 읽으며 Windows에서는 시스템 프록시 설정도 참조합니다. 남아 있는 설정값이 예상과 다르게 동작하게 합니다. session.trust_env = False를 설정하거나 요청마다 프록시를 명시적으로 지정하세요.
프록시 주소 앞에 http:// 또는 https://를 붙여야 하나요?
웹사이트가 HTTPS라도 HTTP 프록시일 경우 http://를 씁니다. 스킴은 클라이언트가 프록시와 통신하는 방식을 설명합니다. https://로 쓰면 최신 urllib3가 프록시에 TLS 시작을 시도해 HTTP 포트에 SSL 오류가 납니다.
이 참조에서 다른 프록시 오류들
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개, 트래픽이 절대 만료되지 않음.