ADSL 代理服务接入常见问答
在当今激烈的网络爬虫与反爬虫斗争中,各大网站和应用程序采取的风险管理手段愈加严格,其中最常见的一种措施是 IP 封禁。
为了有效应对 IP 封禁带来的挑战,设置代理服务成为一种非常有效的解决方案。配置完代理后,爬虫可以通过代理 IP 来隐藏真实 IP,这样就能顺利绕过反爬虫机制。
目前市场上代理的质量差异很大。许多免费的代理要么无法使用,要么已经被禁用,而某些付费的普通代理也常常被多个网站及应用程序列入风险控制黑名单。因此,能够高效抓取数据的高质量代理资源少之又少。优质代理主要有独享代理、ADSL 代理和移动蜂窝代理等几种类型。
我们提供的代理服务基于 ADSL 的轮换代理,下面我们将详细介绍该服务的申请与使用流程。
如何注册试用?
大家可以通过点击这里注册试用。
ADSL 代理的基本信息
ADSL(非对称数字用户环路)是一种拨号上网的技术。拨号时需要提供 ADSL 账号和密码,每次拨号都会更换 IP 地址,这些 IP 地址分布在多个 A 段,数量可达上千万。
与机房常规搭建的普通代理相比,基于 ADSL 的代理具有两个明显优势:首先,它的线路主要依赖于移动、联通和电信等运营商,使用场景更接近普通用户的日常上网,因此被封禁的风险较低;其次,庞大的 IP 库意味着每个 IP 被封禁的概率也会显著降低。
我们的代理服务建立在一个庞大的 ADSL 代理池之上,覆盖了中国各大运营商的拨号 VPS 服务器,覆盖范围超过100个城市,每天的出口 IP 数量可达到30万。这项代理服务能够支持几乎所有网站及应用程序的请求,保证代理质量高,显著降低了被封禁的风险。
申请代理的步骤
若希望使用 ADSL 服务,请首先访问「申请页面」进行申请。首次申请用户可以免费获得1积分,约合17.5MB。
如果您尚未登录,系统会自动转到登录页面,完成登录后即可进行申请。
申请完成后,可在「控制台」查看申请结果,如下图所示:
通过点击「Credentials」,您将获得使用 ADSL 代理服务所需的用户名和密码,二者以冒号分隔,其中用户名为8位,密码为32位,具体如下图所示:
此 ADSL 代理是轮换代理,使用时只需配置一个固定的代理地址和端口。代理地址为 adsl.proxy.acedata.cloud
,端口为 30005
,支持 HTTP/HTTPS/SOCKS 协议,适用于 HTTP 和 HTTPS 网站的访问。
如何进行命令行测试?
获取代理的用户名和密码后,最快的测试方式是使用 curl 命令。如果尚未安装 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": "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 代码接入示例
以下是用 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": "211.93.135.114",
"city": "Shanghai",
"region": "Shanghai",
"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"
}
可以清楚地看到,每次运行生成的代理 IP 都是随机的,并且涵盖了中国的不同省市。
值得注意的是,以上代理设置非常简便。
实际上,上述代码在请求时相当于添加了额外的 Headers——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));
}
无论使用哪种方式,运行效果将是一致的。
若您需在其他编程语言中进行相应设置,请参考上述内容自行进行调整。