cURL로 프록시 사용하는 방법 (-x, 인증, SOCKS5, 회전)
터미널 앞에 앉아 지금 당장 복사해서 붙여넣을 수 있는, cURL 요청을 프록시로 보내는 한 줄짜리 명령이 필요한 상황이군요. 이 가이드는 바로 그것을 제공합니다. curl 프록시 플래그, 세 가지 프로토콜 전부, 인증, 환경 변수, 영구 설정, 회전, 그리고 실제 오류-대-해결 표 - 이 모두를 2026년 8월에 curl 8.x에서 테스트했습니다. 군더더기도 없고 업체의 판매 유도도 없습니다. 이미 cURL을 알고 있고 프록시 문법과 다른 페이지들이 건너뛰는 함정만 원한다면, 제대로 찾아오셨습니다.
마지막 업데이트: 2026년 8월 24일. curl 8.x에서 테스트했습니다. 이 플래그들은 최근 curl 릴리스에서 안정적이지만, 사용 중인 버전을 확인하려면 curl --version을 실행하세요.
TL;DR: 한 줄 명령
프록시를 cURL에 전달하려면 -x(또는 완전히 동일한 쌍둥이인 --proxy)를 사용합니다:
curl -x http://USER:PASS@HOST:PORT https://example.com
-x와 --proxy는 같은 플래그입니다. scheme을 빼면 cURL은 http://로 가정하고, 포트를 빼면 1080으로 가정합니다. 아래의 모든 명령은 그 한 줄의 변형입니다.
시작하기 전에 필요한 것
여기의 어떤 명령이든 실행하려면 모든 프록시 제공업체가 대시보드에서 건네주는 네 가지 값이 필요합니다:
HOST:PORT # the endpoint, e.g. p.webshare.io:80
USERNAME:PASSWORD # your proxy credentials
그 네 가지 값이 cURL에 필요한 전부입니다. 테스트할 실제 엔드포인트가 없다면 계속 읽기 전에 하나 마련하세요 - 뒤에 진짜 프록시가 없으면 명령은 쓸모없습니다. Webshare에는 진짜 무료 요금제(프록시 10개, 카드 불필요)가 있어 바로 이런 테스트용으로 빠르게 받을 수 있으며, -x에 바로 들어가는 평범한 host:port:user:pass 문자열을 건네줍니다. 몇 분이면 테스트용 무료 프록시를 받을 수 있습니다. (Webshare는 제휴 파트너입니다. 저희 제휴 고지를 확인하세요. 이는 여러분이 내는 가격에도 아래 명령에도 영향을 주지 않습니다.)
제 curl 테스트에서는 회전 게이트웨이 줄을 손으로 만들지 않고 Webshare 대시보드에서 sticky-session 엔드포인트를 그대로 붙여넣습니다. 그러면 호스트, 포트, 자격 증명이 -x에 들어가는 준비된 하나의 문자열로 옵니다. 이것을 특정 curl 버전에 고정하지 않았습니다 - 어지간히 최근의 curl이라면 어느 것이든 이 플래그들을 똑같이 처리합니다 - 그러니 시스템에 딸려 오는 것을 쓰세요.
cURL 프록시 기본 문법: -x / --proxy 플래그
두 형식은 서로 바꿔 쓸 수 있으니, 기억하기 쉬운 쪽을 고르세요:
# These two lines are identical
curl -x http://HOST:PORT https://example.com
curl --proxy http://HOST:PORT https://example.com
cURL은 사람들을 놀라게 하는 두 가지 기본값을 채웁니다. scheme을 생략하면 HTTP 프록시로 가정하고, 포트를 생략하면 1080으로 가정합니다:
# No scheme -> HTTP proxy is assumed
curl -x HOST:PORT https://example.com
# No port -> 1080 is assumed (so this targets HOST:1080)
curl -x http://HOST https://example.com
스크립트에서는 명시적으로 쓰세요. http://HOST:PORT를 전부 적으면 나중에 "왜 1080 포트로 가는 거지?"라는 놀람을 피할 수 있습니다.
cURL에서의 HTTP, HTTPS, SOCKS5 프록시
HOST:PORT 앞의 scheme이 cURL에 프록시와 통신하는 방법을 알려줍니다. 이는 대상 URL이 https인지 여부와는 별개입니다.
| 프록시 유형 | 플래그 예시 |
|---|---|
| HTTP 프록시 | -x http://HOST:PORT |
| HTTPS 프록시(프록시로의 TLS) | -x https://HOST:PORT |
| SOCKS5, 로컬 DNS | -x socks5://HOST:PORT |
| SOCKS5, 원격 DNS | -x socks5h://HOST:PORT |
HTTP 및 HTTPS 프록시
# Reach an https site through a plain HTTP proxy - this is normal
curl -x http://HOST:PORT https://example.com
# Proxy that itself speaks TLS
curl -x https://HOST:PORT https://example.com
TLS가 두 단계라는 점에 주의하세요. -x 값 안의 http:// 대 https://는 여러분에서 프록시까지의 홉을 나타냅니다. 대상 URL의 https://는 프록시에서 사이트까지의 홉입니다. 대부분의 데이터센터 프록시는 https 페이지를 가져올 때도 http:// scheme을 쓰므로, 거기서 시작하세요.
SOCKS5와 socks5:// 대 socks5h://의 차이
curl -x socks5://HOST:PORT https://example.com
curl --socks5 HOST:PORT https://example.com # same thing
# Let the PROXY resolve the hostname (remote DNS)
curl -x socks5h://HOST:PORT https://example.com
여기가 대부분의 가이드가 건너뛰는 세부입니다. socks5://에서는 cURL이 대상 호스트명을 여러분의 컴퓨터에서 해석하고 프록시에는 IP 주소를 보냅니다. socks5h://에서는 cURL이 호스트명을 보내고 프록시가 DNS 조회를 합니다. 로컬 DNS 유출을 피하거나 프록시 네트워크에만 존재하는 이름을 해석하고 싶을 때처럼, DNS가 출구에서 일어나길 원할 때는 언제든 socks5h://를 쓰세요.
cURL 프록시 인증 (-U / --proxy-user)
대부분의 유료 프록시는 사용자 이름과 비밀번호를 요구합니다. 제공하는 방법은 두 가지입니다:
# Dedicated flag (-U is short for --proxy-user)
curl -x http://HOST:PORT -U USER:PASS https://example.com
curl -x http://HOST:PORT --proxy-user USER:PASS https://example.com
# Credentials embedded in the proxy URL
curl -x http://USER:PASS@HOST:PORT https://example.com
대부분의 407 오류를 일으키는 함정: 자격 증명을 URL에 넣을 때 비밀번호의 특수 문자는 모두 URL 인코딩해야 합니다. 그러지 않으면 cURL이 문자열을 잘못 읽고 프록시가 여러분을 거부합니다. @는 %40으로, :는 %3A로, #은 %23으로, 이런 식으로 인코딩합니다:
# Password is p@ss:word -> encode it in the URL
curl -x "http://user:p%40ss%3Aword@HOST:PORT" https://example.com
# Or sidestep encoding entirely with -U (quote it for the shell)
curl -x http://HOST:PORT -U 'user:p@ss:word' https://example.com
-U 형식은 첫 번째 콜론에서만 나누므로, 비밀번호 안의 콜론은 거기서는 괜찮습니다. --proxy-user는 HTTP뿐 아니라 SOCKS5 인증에도 작동합니다.
환경 변수로 프록시 설정하기 (HTTP_PROXY / HTTPS_PROXY)
셸에서 프록시를 한 번 설정하면 그 세션의 모든 cURL 호출이 그것을 씁니다. 문법은 셸마다 다르며, 크로스플랫폼 튜토리얼이 대개 여기서 틀립니다.
# Unix / macOS (bash, zsh)
export http_proxy="http://USER:PASS@HOST:PORT"
export https_proxy="http://USER:PASS@HOST:PORT"
export NO_PROXY="localhost,127.0.0.1,.internal.example.com"
curl https://example.com
# Windows PowerShell (curl is an alias here - call curl.exe)
$env:HTTP_PROXY = "http://USER:PASS@HOST:PORT"
$env:HTTPS_PROXY = "http://USER:PASS@HOST:PORT"
curl.exe https://example.com
:: Windows cmd.exe
set HTTP_PROXY=http://USER:PASS@HOST:PORT
set HTTPS_PROXY=http://USER:PASS@HOST:PORT
curl https://example.com
알아둘 것이 두 가지입니다. 평범한 HTTP 변수의 경우 cURL은 소문자 http_proxy만 읽습니다(의도적인 보안 선택). HTTPS_PROXY와 NO_PROXY는 대소문자 어느 쪽이든 작동합니다. 그리고 NO_PROXY(또는 호출별 --noproxy 플래그)는 프록시를 우회해야 할 호스트를 나열합니다. 요청별 -x는 환경이 설정한 것을 항상 덮어씁니다:
# Ignore the env proxy for these hosts
curl --noproxy example.com,localhost https://example.com
# -x wins over the environment variables for this one call
curl -x http://OTHER_HOST:PORT https://example.com
cURL이 항상 프록시를 쓰게 하기 (.curlrc)
늘 쓰는 프록시라면 cURL의 설정 파일에 넣어 다시는 플래그를 입력하지 않게 하세요. Unix와 macOS에서는 ~/.curlrc이고, Windows에서는 홈 디렉터리의 _curlrc 또는 %APPDATA%\_curlrc입니다. 한 줄 추가합니다:
# ~/.curlrc (or %APPDATA%\_curlrc on Windows)
proxy = "http://USER:PASS@HOST:PORT"
이제 모든 cURL 명령이 자동으로 그 프록시를 거칩니다. 파일을 수정하지 않고 한 번의 호출만 우회하려면, 그 자리에서 프록시를 비활성화하세요:
curl --noproxy '*' https://example.com # ignore the config proxy
curl -x '' https://example.com # empty proxy = direct connection
요청마다 프록시 회전하기
두 가지 정직한 패턴이 거의 모든 회전 요구를 충족합니다. 첫 번째는 제공업체의 회전 게이트웨이를 씁니다 - 요청마다 새로운 출구 IP를 건네주는 단일 엔드포인트이므로, 루프 안에서 호출하기만 하면 됩니다:
# Rotating gateway endpoint (Webshare exposes one at p.webshare.io:80;
# check your dashboard for the exact host and rotation setting)
for i in $(seq 1 5); do
curl -s -x http://USER:[email protected]:80 https://ipinfo.io/ip
done
두 번째는 자신만의 프록시 목록 파일을 한 줄에 -x 하나씩 반복하여 완전한 제어권을 줍니다. Webshare를 비롯한 대부분의 제공업체는 목록을 host:port:user:pass 형식으로 내보낼 수 있어 깔끔하게 파싱됩니다:
# proxies.txt: one host:port:user:pass per line
while IFS=: read -r host port user pass; do
curl -s -x "http://$user:$pass@$host:$port" https://ipinfo.io/ip
done < proxies.txt
책임감 있게 스크레이핑하세요. 공개 데이터만 가져오고, 각 사이트의 robots.txt와 이용약관을 존중하고, 요청 속도를 조절하고, 로그인 뒤에 있는 것에는 손대지 마세요. 이는 법률 자문이 아니라 좋은 관행입니다 - 여러분의 프로젝트와 관할권에 맞는 규칙을 확인하세요. 회전이 워크플로의 핵심이라면, 회전 프록시와 웹 스크레이핑용 프록시에 관한 저희 가이드가 코드 조각보다 더 깊이 들어갑니다.
cURL이 프록시를 쓰고 있는지 검증하기 (IP 확인)
프록시가 적용됐다고 넘겨짚지 마세요. 사이트가 실제로 본 IP가 무엇인지 echo 서비스에 물어보세요:
# Should print the proxy's exit IP, not yours
curl -x http://USER:PASS@HOST:PORT https://ipinfo.io/ip
curl -x http://USER:PASS@HOST:PORT http://httpbin.org/ip
# See the proxy handshake and CONNECT line
curl -v -x http://USER:PASS@HOST:PORT https://example.com
결과를 직접 호출(프록시 없이 curl https://ipinfo.io/ip)과 비교하세요. 두 IP가 다르면 프록시가 작동 중이고, 같으면 cURL이 여전히 직접 나가고 있으며 여러분의 -x나 환경 변수가 적용되지 않은 것입니다. -v 출력은 프록시로 가는 CONNECT 줄을 보여주며, 이것이 경로를 확인하는 가장 빠른 방법입니다.
흔한 cURL 프록시 오류와 해결 방법
| 오류 | 가능한 원인 | 해결 |
|---|---|---|
407 Proxy Authentication Required | 자격 증명 누락 또는 오류, 혹은 URL에 넣은 비밀번호의 특수 문자가 인코딩되지 않음 | -U 'user:pass'를 추가하거나 비밀번호를 URL 인코딩하세요(@ -> %40, : -> %3A) |
curl: (7) Couldn't connect to proxy | 호스트, 포트, 또는 scheme 오류 | HOST:PORT를 다시 확인하세요. http:// 대 socks5://를 시도하세요. 프록시가 가동 중이고 도달 가능한지 확인하세요 |
curl: (56) / HTTPS 프록시를 통한 SSL 인증서 오류 | 프록시의 TLS 인증서가 신뢰되지 않음 | 테스트 용도로만 --proxy-insecure를 추가하거나 --proxy-cacert를 CA로 지정하세요. 프로덕션에서는 인증서를 제대로 고치세요 |
| SOCKS5에서 사이트가 로컬 DNS로 해석됨 | 원격 DNS를 원했는데 socks5://를 사용 | socks5h://로 전환하여 프록시가 호스트명을 해석하게 하세요 |
| 요청이 멈추거나 끝내 응답이 없음 | 죽은 프록시 또는 느린 대상 | --connect-timeout 10과 --max-time 30을 추가해 빠르게 실패시키세요 |
"curl 프록시가 안 된다"는 신고 열 건 중 아홉은 첫 번째 행, 즉 인코딩되지 않은 비밀번호로 인한 407입니다. 다른 무엇보다 먼저 -U에 손을 뻗으세요.
cURL에서 어떤 프록시 유형을 써야 할까?
cURL은 모든 프록시를 똑같이 다루므로, 선택은 도구가 아니라 대상에 관한 문제입니다. 정직한 세 줄 지침:
- 데이터센터 프록시 - 가장 빠르고 저렴하지만 탐지되기 쉬우므로, 방어가 약한 공개 사이트의 대량 스크레이핑에 가장 적합.
- 주거용 프록시 - 진짜 가정 사용자처럼 보여 차단하기 어렵지만, 더 비싸고 보통 GB 단위로 과금.
- ISP(정적 주거용) 프록시 - 중간 지점: 데이터센터의 속도에 주거용처럼 보이는 안정적인 IP.
curl -x에 그대로 들어가는 평범한 엔드포인트와 테스트용 무료 요금제만 원하는 개발자에게 Webshare는 손쉬운 가성비 선택지입니다 - 저비용에 개발자 친화적이고, 씨름할 래퍼 없는 host:port:user:pass 문자열. 유일한 선택지는 아닙니다: Bright Data, Oxylabs, IPRoyal은 필요하다면 모두 더 크거나 더 특화된 주거용 네트워크를 운영합니다(Oxylabs가 Webshare를 소유하고 있으니 독립적인 경쟁사가 아니라 관련 회사로 보세요). Webshare의 무료 프록시로 시작하거나, 시장 전체를 비교하려면 저희 최고의 프록시 서비스 허브를 보세요.
자주 묻는 질문
cURL은 SOCKS5 프록시를 지원하나요?
네. -x socks5://HOST:PORT 또는 --socks5 HOST:PORT를 쓰세요. 여러분의 컴퓨터가 아니라 프록시가 대상 호스트명을 해석하게 하려면(원격 DNS) socks5h://로 전환하세요.
HTTPS 요청에만 프록시를 설정하려면?
https_proxy(또는 HTTPS_PROXY) 환경 변수를 설정하고 http_proxy는 설정하지 않은 채로 두면 https 트래픽만 라우팅됩니다. 단일 호출이라면 https 명령에 -x만 추가하면 됩니다.
한 번의 요청에서만 cURL이 프록시를 무시하게 하려면?
curl --noproxy '*' URL 또는 curl -x '' URL을 쓰세요. 둘 다 그 단일 호출에 대해 환경 변수나 .curlrc 프록시를 덮어쓰고 직접 연결합니다.
cURL 프록시가 407을 반환하는 이유는?
407은 프록시가 여러분의 자격 증명을 거부했다는 뜻입니다. 사용자 이름과 비밀번호를 전달하지 않았거나, URL에 넣은 비밀번호의 특수 문자가 URL 인코딩되지 않았거나 둘 중 하나입니다. -U 'user:pass'를 추가하거나 비밀번호를 인코딩하세요(@는 %40이 됩니다).
cURL로 IP를 회전할 수 있나요?
네, 두 가지 방법이 있습니다: 제공업체의 회전 게이트웨이 엔드포인트를 루프로 호출해 요청마다 새 IP를 얻는 방법과, 자신만의 프록시 목록 파일을 한 줄에 -x 하나씩 반복하는 방법입니다. Python에서 같은 작업을 하려면 Python requests로 프록시 사용하기를 보세요.