메인 콘텐츠로 건너뛰기
크롤러와 반크롤러 간의 싸움이 점점 치열해짐에 따라, 각종 웹사이트와 앱의 위험 관리 감지가 점점 강해지고 있으며, 그 중 하나가 IP 차단입니다. IP 차단의 문제를 해결하기 위한 효과적인 방법 중 하나는 프록시를 설정하는 것입니다. 프록시를 설정한 후, 크롤러는 프록시의 IP를 이용해 자신의 실제 IP 주소를 위장하여 반크롤러의 제한을 우회할 수 있습니다. 하지만 프록시의 품질은 높고 낮음이 있으며, 예를 들어 시중의 무료 프록시는 거의 대부분 사용 불가능하거나 차단된 상태입니다. 또한 일부 유료 일반 프록시도 각종 웹사이트와 앱의 위험 관리 블랙리스트에 추가되고 있습니다. 따라서 현재 고품질 데이터 크롤링에 사용할 수 있는 프록시는 점점 줄어들고 있으며, 현재 시중에서 품질이 높은 프록시는 주로 전용 프록시, ADSL 프록시, 이동 통신 프록시의 몇 가지 유형이 있습니다. 본 프록시 서비스는 ADSL을 기반으로 한 회전 프록시 서비스로, 본 문서에서는 이 서비스의 신청 및 사용 방법을 소개합니다.

ADSL 프록시 소개

ADSL, 영어 전체 명칭은 Asymmetric Digital Subscriber Line, 즉 비대칭 디지털 가입자 회선입니다. ADSL은 다이얼업 방식으로 인터넷에 접속하며, 다이얼업 시 ADSL 계정과 비밀번호를 입력해야 하며, 매번 다이얼업할 때마다 IP가 변경됩니다. IP는 여러 A 구간에 분포되어 있으며, 모든 IP를 사용할 수 있다면 IP 수량은 천만에 이를 수 있습니다. ADSL 방식으로 구축된 프록시는 데이터 센터에서 구축된 일반 프록시와 비교하여 두 가지 장점이 있습니다. 첫째, 회선은 기본적으로 이동통신, 유니콤, 전신으로, 주민의 일상적인 인터넷 회선에 더 가깝기 때문에 IP가 차단될 확률이 낮습니다. 둘째, IP 수량이 많을수록 각 IP가 차단될 확률이 낮아집니다. 본 프록시 서비스는 대규모 ADSL 프록시 풀을 기반으로 하며, 주로 중국 회선을 커버하고, 회선은 주로 이동통신, 유니콤, 전신 등의 다이얼 VPS 서버에서 제공되며, 중국의 100개 이상의 도시를 커버하고, 매일 약 30만 개의 출구 IP를 제공합니다. 시중의 거의 모든 웹사이트와 앱의 데이터 요청을 지원하며, 프록시 품질이 매우 높아 위험 관리 확률을 크게 줄일 수 있습니다.

신청 방법

ADSL 서비스를 사용하려면 먼저「신청 페이지」에서 신청할 수 있으며, 최초 신청 시 1 포인트의 무료 한도가 제공되며, 약 17.5MB입니다. 로그인하지 않은 경우 자동으로 로그인 페이지로 리디렉션되며, 로그인 후 계속 신청할 수 있습니다. 신청이 완료되면「콘솔」에서 본인의 신청 결과를 확인할 수 있으며, 아래와 같이 표시됩니다: 「Credentials」를 클릭하면 ADSL 프록시 서비스의 사용자 이름과 비밀번호를 확인할 수 있으며, 콜론으로 구분되어 있습니다. 사용자 이름은 8자리, 비밀번호는 32자리입니다. 아래와 같이 표시됩니다: 본 ADSL 프록시는 회전 프록시이므로 사용할 때는 고정된 프록시 주소와 포트만 설정하면 됩니다. 프록시의 주소와 포트는 각각 adsl.proxy.acedata.cloud와 30005이며, HTTP/HTTPS/SOCKS 프로토콜의 프록시로, HTTP 및 HTTPS 프로토콜의 웹사이트에 접근할 수 있습니다.

명령 테스트

프록시의 사용자 이름과 비밀번호를 얻은 후, 가장 편리한 방법은 curl 명령줄을 통해 테스트하는 것입니다. 설치하지 않은 경우 https://curl.se/를 참조하여 설치하면 됩니다. 현재 프록시의 사용자 이름과 비밀번호가 1f78266a:eff0896726224fa2a99fe82dd1f07562인 경우, 다음과 같은 curl 명령으로 테스트할 수 있습니다:
curl -x 1f78266a:eff0896726224fa2a99fe82dd1f07562@adsl.proxy.acedata.cloud:30005 https://ipinfo.io
여기서 curl의 -x 매개변수를 사용하여 프록시 주소를 지정하였으며, 프록시 프로토콜은 기본적으로 HTTP/HTTPS입니다. 요청하는 URL은 https://ipinfo.io이며, 이 사이트는 요청한 사이트의 실제 IP 주소와 IP가 위치한 지역을 반환할 수 있습니다. 실행 결과는 다음과 같습니다:
{
  "ip": "183.210.224.227",
  "city": "Jinrongjie",
  "region": "Beijing",
  "country": "CN",
  "loc": "39.9122,116.3561",
  "org": "AS56046 China Mobile communications corporation",
  "postal": "101100",
  "timezone": "Asia/Shanghai",
  "readme": "https://ipinfo.io/missingauth"
}

코드 연동

아래는 Python을 예로 들어 해당 프록시의 설정 방법을 보여줍니다:
import requests

proxy = 'https://{proxy_username}:{proxy_password}@adsl.proxy.acedata.cloud:30005'

proxies = {
    'http': proxy,
    'https': proxy
}

for _ in range(3):
    resp = requests.get('https://ipinfo.io', proxies=proxies)
    print(resp.text)

여기서 우리는 먼저 프록시의 URL을 선언하고 proxy 변수로 정의하였으며, 프로토콜은 http 프로토콜이고, 뒤에 터널 프록시의 사용자 이름과 비밀번호(즉, 콘솔에 표시된 사용자 이름과 비밀번호, 두 개는 콜론으로 구분됨)를 따르고, 그 뒤에 @ 기호를 추가한 후 프록시의 주소와 포트를 추가하면 됩니다. 그 다음 proxies 변수를 선언하고 두 개의 키-값 쌍을 구성하였으며, 키 이름은 각각 http와 https이고, 그 값은 모두 proxy로, HTTP 및 HTTPS 프로토콜의 웹사이트에 대해 proxy 변수로 정의된 프록시를 사용하여 요청을 수행합니다. 마지막으로 세 번의 루프를 정의하여 프록시 테스트를 수행하며, 요청하는 URL은 https://ipinfo.io이며, 이 사이트는 요청한 사이트의 실제 IP 주소와 IP가 위치한 지역을 반환할 수 있습니다. 실행 결과는 다음과 같습니다:
{
  "ip": "211.93.135.114",
  "city": "상하이",
  "region": "상하이",
  "country": "CN",
  "loc": "31.2222,121.4581",
  "org": "AS4837 CHINA UNICOM China169 Backbone",
  "postal": "200000",
  "timezone": "Asia/Shanghai",
  "readme": "https://ipinfo.io/missingauth"
}
{
  "ip": "112.22.109.176",
  "city": "난징",
  "region": "장쑤",
  "country": "CN",
  "loc": "32.0617,118.7778",
  "org": "AS56046 China Mobile communications corporation",
  "postal": "210000",
  "timezone": "Asia/Shanghai",
  "readme": "https://ipinfo.io/missingauth"
}
{
  "ip": "39.162.179.215",
  "city": "양저우",
  "region": "장쑤",
  "country": "CN",
  "loc": "32.3972,119.4358",
  "org": "AS24445 Henan Mobile Communications Co.,Ltd",
  "postal": "225000",
  "timezone": "Asia/Shanghai",
  "readme": "https://ipinfo.io/missingauth"
}
볼 수 있듯이, 매번 실행할 때마다 얻는 프록시 IP는 무작위이며, IP가 위치한 지역은 실제로 중국의 다양한 성과 도시에서 온 것입니다. 물론, 위의 프록시 설정 방식은 상대적으로 간단한 설정 방식입니다. 실제로 위의 코드는 요청할 때 추가적인 헤더인 Proxy Authorization을 설정한 것과 동일합니다. 따라서 위의 코드는 다음과 같이 다시 쓸 수 있습니다:
import requests
import base64

proxy_host = 'adsl.proxy.acedata.cloud'
proxy_port = '30005'
proxy_username = '{proxy_username}' # 8자리 사용자 이름
proxy_password = '{proxy_password}' # 32자리 비밀번호

credentials = base64.b64encode(
    f'{proxy_username}:{proxy_password}'.encode()).decode()

proxies = {
    'http': f'http://{proxy_host}:{proxy_port}',
    'https': f'http://{proxy_host}:{proxy_port}'
}

headers = {
    'Proxy-Authorization': f'Basic {credentials}'
}

for _ in range(3):
    resp = requests.get('https://ipinfo.io',
                        proxies=proxies, headers=headers)
    print(resp.text)

볼 수 있듯이, 여기서 우리는 Proxy-Authorization이라는 요청 헤더를 통해 프록시의 사용자 이름과 비밀번호를 추가로 설정했습니다(기본적으로 Base64 인코딩 필요). 이러한 코드 실행 효과도 동일합니다. 다른 언어, 예를 들어 JavaScript의 axios에서도 유사한 설정 방식을 사용할 수 있습니다:
const axios = require("axios");
const base64 = require("base64");

const proxy_host = "adsl.proxy.acedata.cloud";
const proxy_port = "30005";
const proxy_username = "{proxy_username}"; // 8자리 사용자 이름
const proxy_password = "{proxy_password}"; // 32자리 비밀번호

const credentials = base64.encode(`${proxy_username}:${proxy_password}`);

const proxies = {
  http: `http://${proxy_host}:${proxy_port}`,
  https: `http://${proxy_host}:${proxy_port}`,
};

const headers = {
  "Proxy-Authorization": `Basic ${credentials}`,
};

for (let i = 0; i < 3; i++) {
  axios
    .get("https://ipinfo.io", { proxies, headers })
    .then((resp) => console.log(resp.data))
    .catch((err) => console.error(err));
}
실행 효과는 모두 동일합니다. 다른 언어의 설정 방법에 대해서는 위의 내용을 참고하여 스스로 수정하시면 됩니다.

더 구매하기

귀하의 패키지가 이미 소진된 경우, 계속해서 해당 프록시 서비스를 사용하려면 더 구매해야 합니다. 더 구매하려면 「신청 페이지」로 가서 직접 「더 구매하기」 버튼을 클릭하여 선택하시면 됩니다. 단일 구매 시 단가가 더 저렴합니다.