빠른 답변
Python Requests에서 고정 프록시를 어떻게 사용하나요?
Python Requests에서 고정 프록시를 사용하려면 IP의 호스트, 포트, 사용자 이름, 비밀번호로 프록시 URL을 만드세요. proxies=의 http와 https 키 모두에 전달하고, 타임아웃을 설정한 뒤 api.ipify.org에서 출구 IP를 확인하세요. SteadyProxy 고정 IP는 2026년 10월 기준 30일 동안 US$2.24이며, KYC 없이 암호화폐 결제가 가능합니다.
핵심 정보는 무엇인가요?
| 설치 | python -m pip install requests (SOCKS5: requests[socks]) |
|---|---|
| HTTP 프록시 URL | http://USERNAME:PASSWORD@host:port, for both the http and https keys |
| SOCKS5 프록시 URL | socks5h://USERNAME:PASSWORD@host:port (기본 SOCKS5 포트 7778) |
| 특수 문자 | urllib.parse.quote로 사용자 이름과 비밀번호를 URL 인코딩하세요 |
| 환경 변수 프록시 | session.trust_env = False는 다른 곳에서 설정된 HTTP_PROXY를 무시합니다 |
| 타임아웃 | (10, 30): 연결에 10초, 읽기에 30초, 예제 기준 |
| 테스트 완료 | Python 3.14 및 Requests 2.34, 2026년 10월 19일, 비밀번호로 보호된 테스트 프록시 경유 |
고정 프록시 하나로 요청을 어떻게 보내나요?
각 고정 IP는 대시보드에 자체 호스트, 포트, 사용자 이름, 비밀번호가 있습니다. 코드가 아닌 환경 변수에 넣으세요. 아래 스크립트는 프록시 URL을 만들고 api.ipify.org로 요청을 하나 보내며, 출구 IP가 예상과 다르면 중단합니다. 그런 다음 ipinfo.io에서 네트워크 이름을 읽습니다. 비밀번호가 틀리면 테스트에서 확인했듯이 Requests가 407 Proxy Authentication Required를 언급하는 ProxyError를 발생시킵니다.
"""Python Requests through one static proxy, with a check of the exit IP.
Install: python -m pip install requests
"""
import os
from urllib.parse import quote
import requests
HOST = os.environ.get("PROXY_HOST", "gw.steadyproxy.com")
PORT = os.environ.get("PROXY_PORT", "7777")
USER = quote(os.environ.get("PROXY_USER", "USERNAME"), safe="")
PASSWORD = quote(os.environ.get("PROXY_PASS", "PASSWORD"), safe="")
EXPECTED_IP = os.environ.get("EXPECTED_IP") # the static IP listed in your dashboard
# The proxy URL starts with http:// even for https:// sites (Requests opens a CONNECT tunnel)
PROXY = "http://" + USER + ":" + PASSWORD + "@" + HOST + ":" + PORT
PROXIES = {"http": PROXY, "https": PROXY}
with requests.Session() as session:
session.trust_env = False # ignore HTTP_PROXY / HTTPS_PROXY set elsewhere on the machine
response = session.get("https://api.ipify.org?format=json", proxies=PROXIES, timeout=(10, 30))
response.raise_for_status()
exit_ip = response.json()["ip"]
print("Exit IP:", exit_ip)
if EXPECTED_IP and exit_ip != EXPECTED_IP:
raise SystemExit("Exit IP differs from the static IP you expected")
page = session.get("https://ipinfo.io/json", proxies=PROXIES, timeout=(10, 30))
page.raise_for_status()
print("Network:", page.json().get("org"), "-", page.json().get("country"))
https:// 사이트에 프록시 URL이 http://인 이유는 무엇인가요?
proxies 딕셔너리의 키는 대상 사이트의 스킴이고, 값은 프록시 주소입니다. https:// 사이트의 경우 Requests는 HTTP 프록시에 CONNECT 터널을 열도록 요청한 뒤 이를 통해 사이트로 TLS를 실행합니다. 프록시는 복호화된 페이지를 절대 보지 못합니다. 따라서 두 키 모두 같은 http:// 프록시 URL을 가리킵니다. 인증서 검사를 켜 두세요: 프록시 오류를 없애려고 verify=False를 설정하지 마세요.
각 계정에 자체 고정 IP를 어떻게 부여하나요?
각 계정이나 작업을 하나의 IP에 매핑하고 매핑마다 Session 하나를 만드세요. Session은 쿠키를 유지하고 연결을 재사용하며, trust_env = False이면 해당 proxies 설정이 환경 변수로 대체되지 않습니다. 아래 예제는 IP마다 한 줄씩, host, port, username, password 순서로 읽으며, 이는 대시보드의 네 값에서 복사할 수 있습니다.
"""One static IP per account or per job with Python Requests.
Each line holds the four values shown for one IP in your dashboard:
host:port:username:password
"""
import os
from urllib.parse import quote
import requests
STATIC_IPS = {
"store-uk": os.environ.get("PROXY_STORE_UK", "gw.steadyproxy.com:7777:USERNAME:PASSWORD"),
"store-de": os.environ.get("PROXY_STORE_DE", "gw.steadyproxy.com:7777:USERNAME:PASSWORD"),
}
def session_for(name):
host, port, user, password = STATIC_IPS[name].split(":", 3)
proxy = "http://" + quote(user, safe="") + ":" + quote(password, safe="") + "@" + host + ":" + port
session = requests.Session()
session.trust_env = False
session.proxies = {"http": proxy, "https": proxy}
return session
for account in STATIC_IPS:
with session_for(account) as s:
ip = s.get("https://api.ipify.org", timeout=(10, 30)).text
print(account, "->", ip)
HTTP 대신 SOCKS5를 어떻게 사용하나요?
requests[socks]를 설치하고 http://를 socks5h://로, HTTP 포트를 SOCKS5 포트로 바꾸세요. h는 프록시가 호스트 이름을 확인하게 하므로 DNS 응답이 IP의 국가와 일치합니다. 나머지 코드는 동일하게 유지됩니다. 완전하고 테스트된 예제는 SOCKS5 고정 프록시 가이드에 있습니다. 한 고정 IP의 두 포트는 동일한 출구 IP로 이어집니다.
흔한 오류는 무엇을 의미하나요?
각 오류는 하나의 계층을 가리킵니다.
- 407이 있는 ProxyError: 사용자 이름이나 비밀번호가 틀렸거나, 이 머신이 허용 목록에 없습니다.
- ConnectTimeout: 호스트나 포트가 틀렸거나, 사용자 측 방화벽이 프록시 포트로 나가는 트래픽을 차단합니다.
- ReadTimeout: 대상이나 경로가 느립니다; 나중에 재시도하고 읽기 타임아웃을 유지하세요.
- SSLError: 대상이나 사용자 머신의 인증서 문제입니다; 검증을 비활성화하지 마세요.
- 대상에서 온 403 또는 429: 사이트가 요청을 거부했거나 속도를 제한했습니다; 속도를 늦추세요.
한 IP가 한 시간 동안 모든 요청에 실패하면 지원팀에 문의하세요. 교체 규칙: IP가 작동하지 않으면 지원팀에 문의하세요: 재고가 허용하는 범위에서 수리하거나 동일 국가의 다른 IP로 교체해 드립니다.
Python과 고정 프록시에 대해 사람들이 또 무엇을 묻나요?
http와 https 키를 모두 설정하는 이유는 무엇인가요?
Requests는 대상 URL의 스킴으로 프록시를 선택합니다. https 키가 없으면 https:// 사이트로의 요청이 사용자 자신의 IP에서 직접 나가게 됩니다. 두 키를 같은 프록시 URL로 설정하면 모든 요청이 고정 IP를 통해 전송됩니다. 스크립트의 api.ipify.org 확인이 누락된 키를 즉시 잡아냅니다.
사용자 이름과 비밀번호를 URL 인코딩하는 이유는 무엇인가요?
@, :, / 같은 문자는 URL 내에서 의미를 가집니다. @가 있는 비밀번호는 그렇지 않으면 로그인 부분의 끝으로 읽힙니다. safe=''와 함께 urllib.parse.quote는 이를 인코딩하고, Requests는 프록시로 로그인을 보내기 전에 이를 디코딩합니다. 이는 HTTP와 socks5h:// URL 모두에서 작동합니다.
trust_env를 False로 설정하는 이유는 무엇인가요?
Requests는 기본적으로 환경에서 HTTP_PROXY, HTTPS_PROXY, NO_PROXY를 읽으며, 문서에서는 환경 프록시가 Session의 proxies 설정을 덮어쓸 수 있다고 경고합니다. 그러면 VPN이나 기업 설정이 일부 요청을 다른 곳으로 라우팅할 수 있습니다. trust_env = False는 코드가 전달한 프록시만 사용하게 합니다.
같은 코드를 httpx나 aiohttp와 함께 사용할 수 있나요?
예, 아이디어는 같습니다: 호스트, 포트, 사용자 이름, 비밀번호로 만든 프록시 URL에 타임아웃과 출구 IP 확인을 더하는 것입니다. 매개변수 이름은 라이브러리와 버전에 따라 다르므로 해당 라이브러리의 프록시 문서를 따르세요. Requests의 Session처럼 고정 IP마다 클라이언트 하나를 유지하세요.
자격 증명을 저장소에서 어떻게 빼내나요?
예제에서처럼 환경 변수나 시크릿 관리자에서 읽고, 실제 값이 담긴 .env 파일을 절대 커밋하지 마세요. 프록시 URL에는 비밀번호가 포함되므로 로그에 출력하지 마세요. IP 허용 목록 방식을 사용하면 허용된 머신의 스크립트는 프록시 비밀번호가 전혀 필요 없습니다.
Python에서 고정 IP 하나로 요청을 몇 개 처리할 수 있나요?
프록시는 GB가 아닌 IP 및 30일 단위로 청구합니다. GB가 아닌 IP당 30일 단위로 청구되며, 공정 사용 정책이 적용됩니다. 실제 한도는 대상 사이트이며, 하나의 IP에 속도 제한을 걸 수 있습니다. IP당 동시성을 적당히 유지하고, 지연을 추가하며, 각 사이트의 약관을 따르세요. 한 작업에 더 많은 볼륨이 필요하면 작업을 여러 IP에 분산하세요; 고정 IP가 몇 개 필요한가요?를 참조하세요.
이 가이드는 어떤 출처를 사용하나요? (3)
- Requests 고급 사용법: 프록시, SOCKS, 타임아웃 — Requests (2026-10-19)
- urllib.parse: quote — Python Software Foundation (2026-10-19)
- ipify API — ipify (2026-10-19)