Saltar al contenido principal
在爬虫与反爬虫斗争愈演愈烈的情况下,各大网站和App的风控检测越来越强,其中一项就是IP封禁。 为了解决IP封禁的困扰,一个有效的方式就是设置代理,设置代理之后,爬虫可以借助代理的IP来伪装自己的真实IP地址,从而突破反爬虫的限制。 但代理的质量有高有低,比如市面上的免费代理,几乎绝大多数都是不可用或者被封禁的状态,而有些付费普通代理也陆续被加入了各大网站和App的风控黑名单。因此,现在可以用作高质量数据爬取的代理越来越少了,目前市面上质量较高的代理主要有独享代理、ADSL代理、移动蜂窝代理这几种类型。 本代理服务就是基于ADSL搭建的轮换代理服务,本文档会介绍此服务的申请和使用方法。

ADSL代理介绍

ADSL,英文全称是Asymmetric Digital Subscriber Line,即非对称数字用户环路。ADSL通过拨号的方式上网,拨号时需要输入ADSL账号和密码,每次拨号就更换一个IP。IP分布在多个A段,如果IP都能使用,则意味着IP量级可达千万。 基于ADSL方式搭建的代理相比机房搭建的普通代理来说,有两个优势:一是线路基本都是移动、联通、电信,更贴近于居民日常上网线路,所以IP被封禁的概率会低一些。二是IP量级大,IP量级越大,每个IP被封禁的概率就越小。 本代理服务背后是基于一个大规模的ADSL代理池,主要覆盖中国线路,线路主要来自移动、联通、电信等拨号VPS服务器,覆盖中国100多个城市,出口IP约每日30万。支持市面上几乎所有网站和App的数据请求,代理质量很高,能够很大减小风控概率。

申请方法

要使用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": "Shanghái",
  "region": "Shanghái",
  "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": "Nanjing",
  "region": "Jiangsu",
  "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": "Yangzhou",
  "region": "Jiangsu",
  "country": "CN",
  "loc": "32.3972,119.4358",
  "org": "AS24445 Henan Mobile Communications Co.,Ltd",
  "postal": "225000",
  "timezone": "Asia/Shanghai",
  "readme": "https://ipinfo.io/missingauth"
}
Se puede ver que cada vez que se ejecuta, el resultado obtenido de la IP del proxy es aleatorio, y la región de la IP realmente proviene de diferentes provincias y ciudades de China. Por supuesto, el método de configuración del proxy mencionado anteriormente es en realidad una forma relativamente sencilla de configuración. En realidad, el código anterior es equivalente a establecer un encabezado adicional - Proxy Authorization al hacer la solicitud, por lo que el código anterior también se puede reescribir de la siguiente manera:
import requests
import base64

proxy_host = 'adsl.proxy.acedata.cloud'
proxy_port = '30005'
proxy_username = '{proxy_username}' # 8 caracteres de nombre de usuario
proxy_password = '{proxy_password}' # 32 caracteres de contraseña

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)

Se puede ver que aquí hemos configurado adicionalmente el nombre de usuario y la contraseña del proxy a través del encabezado de solicitud Proxy-Authorization (que necesita ser codificado en Base64), el efecto de ejecución de este código también es el mismo. Para otros lenguajes, como JavaScript con axios, también se puede utilizar un método de configuración similar:
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 caracteres de nombre de usuario
const proxy_password = "{proxy_password}"; // 32 caracteres de contraseña

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));
}
El efecto de ejecución es el mismo. Para los métodos de configuración de otros lenguajes, consulte el texto anterior y reescriba según sea necesario.

Comprar más

Si su paquete ya se ha agotado, necesitará comprar más para continuar utilizando el servicio de proxy. Para comprar más, dirígete a la «página de solicitud» y haz clic directamente en el botón «Comprar más» para seleccionar, cuanto más compre en una sola vez, más barato será el precio unitario.