curl의 --preproxy 옵션은 HTTP 또는 HTTPS 프록시에 도달하기 전에 SOCKS 프록시로 연결합니다. 이 특정 체인을 지원하며 임의의 프록시 서버 목록을 지원하는 것은 아닙니다.

경로는 클라이언트 → SOCKS 엔드포인트 → HTTP 프록시 → 목적지입니다. 명령의 문서용 엔드포인트 두 개를 모두 바꾸세요.

curl --preproxy socks5h://203.0.113.10:1080 --proxy http://203.0.113.20:8080 --noproxy '' --connect-timeout 5 --max-time 20 --verbose https://example.com/

SOCKS 서비스는 HTTP 프록시의 주소와 포트에 도달할 수 있어야 합니다. 이어서 HTTP 프록시가 목적지 요청을 받아들여야 합니다. 두 번째 프록시가 호스트 이름을 쓰면 첫 SOCKS 모드가 그 이름을 어디서 해석할지 결정합니다. 숫자 주소 엔드포인트는 이 조회를 피합니다.

실패한 구간 찾기

먼저 각 엔드포인트를 따로 통과하는 요청을 확인하세요. HTTP 구간은 시간 제한이 있는 HTTP 프록시 시험을 사용하세요. 둘 다 작동해도 첫 프록시가 두 번째에 도달하지 못해 결합 경로가 실패할 수 있습니다.

상세 추적을 연결 순서대로 읽으세요. 두 번째 프록시에 도달하는 동안의 SOCKS 실패는 HTTP 프록시가 웹사이트로 향하는 CONNECT를 수락하거나 거절하기로 결정하기 전에 발생합니다. 어떤 핸드셰이크가 실패했는지 기록하세요.

추가 구간이 유용한 경우

사용이 허가된 HTTP 프록시를 SOCKS 경로로 접근할 수 있을 때 유용할 수 있습니다. 하지만 서비스와 네트워크 경로가 하나 더 생겨 실패하거나 지연을 늘릴 수 있습니다. 공개 프록시 목록의 엔드포인트를 연결해도 신뢰성이나 익명성은 보장되지 않으며 연결을 다루는 당사자들을 신뢰해야 합니다.

--preproxy에는 curl 7.52.0 이상이 필요합니다. 다른 애플리케이션은 같은 구성을 지원하지 않을 수 있습니다.

관련 글