간단히 말해 프록시는 네트워크 서비스에 연결되는 외부 계층 역할을 하는 서버입니다. 프록시는 컴퓨터와 사용자가 정보를 추출하고자 하는 사이트 사이의 중개자 역할을 합니다. 사용자의 요청은 관련 사이트로 직접 전송되는 대신 먼저 프록시로 전달되고 프록시는 이를 최종 서버로 전송합니다. 따라서 프록시 서버의 IP 주소는 사용자 대신 사이트가 저장하는 주소가 됩니다.
그렇다면 왜 프록시를 사용해야 할까요?
예를 들어, 제한이나 차단에 대한 두려움 없이 사이트에서 정보를 수집해야 하는 경우. 프록시는 실제 사용자의 IP 주소가 실제 디지털 신원을 변경하지 않도록 마스킹하는 데 도움이 됩니다.
제한이 없는 특정 국가의 프록시를 사용할 수 있습니다. 특정 국가에서는 일부 프로그램 및 웹사이트에 대한 액세스가 제한되거나 차단되기 때문입니다.
특정 사이트에 많은 수의 요청이 전송되면 시스템에 부하가 걸릴 가능성이 있습니다. 따라서 차단될 위험이 큽니다. 여러 프록시를 동시에 사용하면 사용자가 특정 사이트에 요청을 고르게 분산시켜 차단을 피할 수 있습니다.
Requests는 Python을 사용하여 HTTP 요청을 전송하기 위한 라이브러리입니다. 이 라이브러리를 사용하면 GET 및 POST 요청을 간단하게 수행할 수 있습니다. 프록시 없이 Python Requests을 사용하면 HTTP 요청을 보낼 수 있지만 익명성이나 우회 제한을 제공하지 않습니다.
요청을 설치하려면 터미널에 아래 명령을 입력하기만 하면 됩니다:
pip install requests
필요한 라이브러리가 제대로 설정되었는지 확인하려면 Python 개발 환경을 열고 명령을 실행해야 합니다:
import requests
print(requests.__version__)
모든 작업이 제대로 완료되면 스크립트에서 버전 번호를 반환합니다.
요청 라이브러리를 설치하면 HTTP 요청을 실행할 수 있습니다. 그러나 프록시를 통합하려면 Python에서 특정 구성을 수행해야 합니다.
Python에서 요청에 대해 프록시를 올바르게 구성하기 위해 따라야 할 단계를 살펴보겠습니다. SOCKS 프록시를 사용한 Python Requests 구성은 별도로 살펴보겠습니다.
요청 라이브러리를 사용하는 사용자는 파이썬을 사용하여 프록시를 설정하는 것이 매우 쉽습니다. 프록시 서버 주소를 딕셔너리에 전달한 다음 HTTP 요청을 할 때 사용하기만 하면 됩니다.
proxies = {
"http": "http://your-proxy-ip:port",
"https": "http://your-proxy-ip:port",
}
response = requests.get("http://example.com", proxies=proxies)
Python Requests을 사용할 때 프록시 인증은 쉽게 설정할 수 있습니다. 자세한 내용을 자세히 살펴보겠습니다.
proxies = {
"http": "http://username:password@your-proxy-ip:port",
"https": "http://username:password@your-proxy-ip:port",
}
response = requests.get("http://example.com", proxies=proxies)
새로 입력해야 하는 두 개의 필드는 다음과 같습니다:
더 높은 수준의 익명성이 필요하거나 제한이 심한 사이트에서 작업하는 사용자의 경우 표준 HTTP 프록시가 작동하지 않을 수 있습니다. 이 경우 SOCKS 프록시가 더 좋을 수 있습니다.
SOCKS 프록시 지원을 사용하려면 아래 나열된 명령을 사용하여 추가 라이브러리를 설치해야 합니다:
pip install requests[socks]
설치가 완료되면 Python Requests을 통해 아래 예시와 같이 사용할 수 있는 SOCKS 프록시를 설정할 수 있습니다.
import requests
proxies = {
"http": "socks5h://your-proxy-ip:port",
"https": "socks5h://your-proxy-ip:port",
}
response = requests.get("http://example.com", proxies=proxies)
프록시 서버에 인증이 필요한 경우 아래와 같이 프록시 서버를 포함하세요.
proxies = {
"http": "socks5h://username:password@your-proxy-ip:port",
"https": "socks5h://username:password@your-proxy-ip:port",
}
단일 프록시를 통해 많은 요청을 할 때 각 요청에 프록시를 추가하는 대신 프록시와 함께 Python Requests 세션을 사용하는 것이 훨씬 효율적입니다.
프록시를 사용하는 이 방법은 모든 세션에서 설정을 유지하는 데 도움이 됩니다. 또한 코드를 간소화하고 성능을 개선하며 가장 중요한 것은 구현이 훨씬 쉬워진다는 점입니다.
세션을 만드는 방법은 매우 간단합니다 requests.Session().
다음 예를 생각해 보세요:
import requests
# 세션 만들기
session = requests.Session()
session.proxies = {
"http": "http://username:password@your-proxy-ip:port",
"https": "http://username:password@your-proxy-ip:port",
}
# 세션을 통한 요청
response = session.get("http://example.com")
이 세션 내의 모든 Python Requests은 추가 구성 없이 기본적으로 설정된 프록시를 사용합니다.
스크래핑 목적이나 자동화를 위해 웹사이트에 적극적으로 참여하는 경우, 동일한 프록시를 반복해서 사용하면 계정이 차단될 수 있습니다. 여러 개의 다른 프록시 서버를 사용하는 경우 프록시를 교체하여 관리할 수 있습니다.
다음 예는 웹 페이지와의 각 상호 작용에 대해 프록시를 회전하는 루프의 구현을 보여줍니다:
import requests
import random
proxies_list = [
"http://username:password@your-proxy-ip[1]:port",
"http://username:password@your-proxy-ip[2]:port",
"http://username:password@your-proxy-ip[3]:port",
]
session = requests.Session()
for _ in range(5):
proxy = random.choice(proxies_list) # 무작위로 프록시 선택
session.proxies = {"http": proxy, "https": proxy}
response = session.get("http://example.com")
print(f"Used proxy: {proxy}")
print(response.status_code)
요약하자면, 다음은 프록시를 더 잘 관리하는 데 도움이 될 수 있는 몇 가지 제안 사항입니다:
이 글에서는 프록시 서버가 무엇인지, Python Requests에서 프록시를 올바르게 사용하는 방법, 코드를 간소화하기 위해 세션을 통해 프록시를 관리하는 방법에 대해 살펴봤습니다. 이 예제에서는 SOCKS와 일반 프록시의 사용, 인증 처리 방법, 프록시 관리도 보여줍니다.
댓글: 0