> ## Documentation Index
> Fetch the complete documentation index at: https://docs.acedata.cloud/llms.txt
> Use this file to discover all available pages before exploring further.

# 移动蜂窝代理对接说明

> Cellular Rotation Proxy 集成指南 - Ace Data Cloud

在爬虫与反爬虫斗争愈演愈烈的情况下，各大网站和 App 的风控检测越来越强，其中一项就是 IP 封禁。

为了解决 IP 封禁的困扰，一个有效的方式就是设置代理，设置代理之后，爬虫可以借助代理的 IP 来伪装自己的真实 IP 地址，从而突破反爬虫的限制。

但代理的质量有高有低，比如市面上的免费代理，几乎绝大多数都是不可用或者被封禁的状态，而有些付费普通代理也陆续被加入了各大网站和 App 的风控黑名单。因此，现在可以用作高质量数据爬爬取的代理越来越少了，目前市面上质量较高的代理主要有独享代理、ADSL 代理、移动蜂窝代理这几种类型。

本代理服务就是基于移动蜂窝网络（4G、5G）的轮换代理服务，本文档会介绍此服务的申请和使用方法。

## 移动蜂窝代理

移动蜂窝代理，其实就是基于手机流量搭建的代理服务，所有的代理 IP 都是手机真实的 IP。此种代理在爬虫领域使用相对较少，因此被封禁的概率也更小，所以此种代理对于爬取一些风控极强的网站和 App 的爬取有很好的效果。

本代理服务背后是基于一个大规模的群控手机池搭建的代理服务，所有流量都经由纯正的手机流量转发，支持市面上几乎所有网站和 App 的数据请求，代理质量极高，能够极大减小风控概率。

## 申请方法

要使用蜂窝代理服务，可以首先到「[申请页面](https://platform.acedata.cloud/services/d8570fa7-8510-454e-913e-f1bd1b98338d)」进行申请，首次申请有 1 积分免费额度。

![](https://cdn.acedata.cloud/wed8yf.png)

如果您尚未登录，则会自动跳转到登录页面，登录之后继续申请即可。

## 使用方法

申请完毕之后，可以到「控制台」中查看本人的申请结果，如图所示：

![](https://cdn.acedata.cloud/db1js5.png)

点击 「Credentials」，即可查看使用蜂窝代理服务的用户名及密码，以冒号分隔，其中用户名是 8 位，密码是 32 位，如图所示：

![](https://cdn.acedata.cloud/54ffp0.png)

本移动蜂窝代理是一种轮换代理，因此使用的时候只需要设置一个固定的代理地址和端口即可，代理的地址和端口分别是 cellular.proxy.acedata.cloud 和 30000，本代理是 HTTP/HTTPS/SOCKS 协议的代理，可以用于请求 HTTP 和 HTTPS 协议的网站。

## 命令测试

有了代理的用户名密码之后，最方便的方法便是通过 curl 命令行进行测试，如尚未安装，请参考 [https://curl.se/](https://curl.se/) 安装即可。

假如当前代理的用户名密码是 `1f78266a:eff0896726224fa2a99fe82dd1f07562`，我们可以用如下 curl 命令进行测试：

```shell theme={null}
curl -x 1f78266a:eff0896726224fa2a99fe82dd1f07562@cellular.proxy.acedata.cloud:30000 https://ipinfo.io
```

这里我们使用 curl 的 `-x` 参数指定了代理地址，代理协议默认是 HTTP/HTTPS，这里请求的 URL 是 [https://ipinfo.io](https://ipinfo.io)，这个站点可以返回请求该站点的真实 IP 地址和 IP 所在地域。

> 注意：上述用户名密码可能无效，请自行替换成你的用户名密码。

运行结果如下：

```json theme={null}
{
  "ip": "39.144.10.182",
  "city": "Shanghai",
  "region": "Shanghai",
  "country": "CN",
  "loc": "31.2222,121.4581",
  "org": "AS9808 China Mobile Communications Group Co., Ltd.",
  "postal": "200000",
  "timezone": "Asia/Shanghai",
  "readme": "https://ipinfo.io/missingauth"
}
```

可以看到，返回结果的 country 是 CN，代表中国，org 是 China Mobile，代表中国移动网络，确实是蜂窝代理出口。

如果再次运行，可以得到不一样的结果，每次请求都是随机的 IP 出口。

## 代码对接

下面以 Python 为例演示该蜂窝轮换代理的设置方法：

```python theme={null}
import requests

proxy = 'http://{proxy_username}:{proxy_password}@cellular.proxy.acedata.cloud:30000'

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](https://ipinfo.io)，这个站点可以返回请求该站点的真实 IP 地址和 IP 所在地域。

运行结果如下：

```json theme={null}
{
  "ip": "39.144.18.26",
  "city": "Shanghai",
  "region": "Shanghai",
  "country": "CN",
  "loc": "31.2222,121.4581",
  "org": "AS9808 China Mobile Communications Group Co., Ltd.",
  "postal": "200000",
  "timezone": "Asia/Shanghai",
  "readme": "https://ipinfo.io/missingauth"
}
{
  "ip": "39.144.18.26",
  "city": "Shanghai",
  "region": "Shanghai",
  "country": "CN",
  "loc": "31.2222,121.4581",
  "org": "AS9808 China Mobile Communications Group Co., Ltd.",
  "postal": "200000",
  "timezone": "Asia/Shanghai",
  "readme": "https://ipinfo.io/missingauth"
}
{
  "ip": "39.144.182.55",
  "city": "Zhanjiang",
  "region": "Guangdong",
  "country": "CN",
  "loc": "21.2339,110.3875",
  "org": "AS24445 Henan Mobile Communications Co.,Ltd",
  "postal": "524000",
  "timezone": "Asia/Shanghai",
  "readme": "https://ipinfo.io/missingauth"
}
```

可以看到，每次运行的结果得到的代理 IP 都是随机的，而且 IP 所在地域确实是来源于真实手机流量。

当然，上述的代理设置方式实际上是一个相对简洁的设置方式。

实际上上述代码等价于在请求的时候设置了一个额外的 Headers - Proxy Authorization，所以上述代码还可以改写如下：

```python theme={null}
import requests
import base64

proxy_host = 'cellular.proxy.acedata.cloud'
proxy_port = '30000'
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，也可以使用类似的设置方式：

```javascript theme={null}
const axios = require("axios");
const base64 = require("base64");

const proxy_host = "cellular.proxy.acedata.cloud";
const proxy_port = "30000";
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));
}
```

运行效果都是一样的。

对于其他语言的设置方法，请参考上文自行改写。

## 购买更多

如您的套餐已经耗尽，您需要购买更多才能继续使用该代理服务。

要购买更多，请到「[申请页面](https://platform.acedata.cloud/services/d8570fa7-8510-454e-913e-f1bd1b98338d)」直接点击「购买更多」按钮即可选购，单次购买更多，单价越便宜。
