跳到正文

用 API 批量购买静态IP并导入指纹浏览器

让脚本去买、去查、去交付一百个静态 IP,你的时间留给别的事。本文给出三个调用,以及每个指纹浏览器要注意的地方。

三步:购买、读回、导入

购买接口每次只给一个 IP,所以批量就是一个循环。循环必须在首次失败时停下(比如余额不足或没有库存),因为每次调用都会从钱包扣款。控制台的做法一样:「数量」填 1 到 100 时是逐个购买,遇到首次失败就停。

买完后,用列表接口取出所有有效的静态 IP 和它们的登录行。最后一步交给指纹浏览器,每家有自己的本地接口和限制,见下表。

AdsPower 与比特浏览器的本地接口对照

AdsPower 与比特浏览器的本地接口对照
项目AdsPower比特浏览器
地址在哪默认 http://local.adspower.net:50325/,端口可能变,以 Local API 设置里显示的为准文档里没有固定值:登录后在系统设置里取本地接口 URL
存代理用哪个接口POST /api/v2/proxy-list/create,字段 type、host、port、user、password、remark我们读到的文档里没有单独的代理列表接口;代理写在窗口上,用 /browser/update,已有窗口用 /browser/proxy/update
把代理挂到环境上POST /api/v2/browser-profile/create,用 user_proxy_config,或用 proxyid 引用已保存的代理(也可填 random)POST /browser/update,proxyMethod 填 2,再填 proxyType、host、port、proxyUserName、proxyPassword;id 为空就是新建窗口
官方写明的限制Add proxy 一次最多 500 个;所有接口每秒 1 次全部是 POST 加 body;新建窗口时有多个必填字段

数据来自各家官方文档,2026 年 11 月 15 日阅读;版本会变,用到某个字段前请再看一遍原页面。Proxy302 与 AdsPower 是正式合作伙伴;比特浏览器在这里只是第二个例子。

用 Proxy302 怎么做

  1. 第 1 步:充值并创建密钥

    先给钱包充值,再到控制台的 API 密钥页面创建一个 API 密钥。密钥有 id 和 secret 两部分,别写进要提交的脚本里,放环境变量。

  2. 第 2 步:先买一个测试

    用下面的脚本,数量填 1。然后打开「我的资产」(控制台里放着你买到的全部东西的页面),确认这个 IP 在里面,协议也是你选的。

  3. 第 3 步:跑整批

    每次运行用一个新的批次标签。脚本中途停了,用同一个标签再跑一遍:已经用过的 key 不会再买第二次。

  4. 第 4 步:导出登录行

    运行列表脚本,它会生成 proxies.txt,每个有效静态 IP 一行 host:port:username:password。

  5. 第 5 步:导入指纹浏览器

    先导入一行,用它打开一个环境,在 https://ipinfo.io/json 看出口,没问题再导入其余的。一个账号固定用一个 IP。

循环购买静态 IP(Python)

import os, sys, requests

BASE = "https://proxy302.com/open_api/v3"
AUTH = (os.environ["P302_KEY_ID"], os.environ["P302_KEY_SECRET"])  # API key id and secret

def call(method, path, **kw):
    body = requests.request(method, BASE + path, auth=AUTH, timeout=30, **kw).json()
    if body.get("code") != 0:                      # every answer is HTTP 200; code 0 = success
        raise SystemExit(f"{path}: code={body.get('code')} msg={body.get('msg')}")
    return body["data"]

print(call("GET", "/user/users/wallet"))                    # balance in PTC
print(call("GET", "/proxy/payway/static_residential"))      # plans: pick the payway_id of your term

COUNTRY_ID = 233                    # United States; ids come from GET /proxy/area/country?name=...
PAYWAY_ID = int(sys.argv[1])        # plan id printed above
COUNT = int(sys.argv[2])            # keep it small the first time
BATCH = sys.argv[3]                 # one label per batch, e.g. nov15a

for i in range(COUNT):
    data = call("POST", "/proxy/api/proxy/static/ip", json={
        "country_id": COUNTRY_ID,
        "payway_id": PAYWAY_ID,
        "protocol": "http",         # fixed per IP at purchase time
        "is_data_center": False,
        "idempotency_key": f"{BATCH}-{i:04d}",   # same key on a retry = no second purchase
    })
    print(i, data["token_id"], data["host"], data["port"])

仅为示例。先设置 P302_KEY_ID 和 P302_KEY_SECRET,运行时带上套餐 id、一个小数量和批次标签,例如:python buy.py 12 1 nov15a。

导出登录行(Python)

import os, requests

BASE = "https://proxy302.com/open_api/v3"
AUTH = (os.environ["P302_KEY_ID"], os.environ["P302_KEY_SECRET"])

rows, cursor = [], None
while True:
    params = {"page_size": 200, "status": 1, "sort_field": "created_on", "sort": "desc"}
    if cursor:
        params["cursor"] = cursor
    body = requests.get(BASE + "/proxy/tokens/static/ip", params=params, auth=AUTH, timeout=30).json()
    if body["code"] != 0:
        raise SystemExit(body["msg"])
    rows += body["data"]["data"]
    cursor = body["data"].get("next_cursor")
    if not body["data"].get("has_more") or not cursor:
        break

with open("proxies.txt", "w", encoding="utf-8") as f:
    for r in rows:
        f.write(r["ads_proxy_url"] + "\n")     # host:port:username:password
print(len(rows), "active static IPs written to proxies.txt")

仅为示例。ads_proxy_url 和分页字段在开发者 API 说明里有解释。

把登录行发给 AdsPower(Python)

import requests

ADS = "http://local.adspower.net:50325"     # the port can change: see Local API in the AdsPower settings
items = []
for line in open("proxies.txt", encoding="utf-8"):
    host, port, user, pwd = line.strip().split(":", 3)
    items.append({
        "type": "http" if port == "2222" else "socks5",   # Proxy302: HTTP on 2222, SOCKS5 on 3333
        "host": host, "port": int(port), "user": user, "password": pwd,
        "remark": "proxy302",
    })

# AdsPower: at most 500 proxies per call and 1 request per second.
# Check the body shape against the Add proxy page and try with one line first.
print(requests.post(ADS + "/api/v2/proxy-list/create", json=items[:1], timeout=30).json())

示意代码。AdsPower 页面列出了字段但没有请求体示例,所以先发一行、看清返回,再发 500 个。

调用失败时怎么查

购买返回 code 50301

检查 看 msg:它会说明是余额不足、该国家没有库存,还是密钥还没绑定 Proxy302 账号。

处理 充值,或换国家、换租期,然后用同一个批次标签重跑。库存每天变化,以下单页显示为准。

停止条件 充值了、有库存还是反复出现,把 msg 和订单号发给客服。

返回 code 401

检查 密钥 id 或 secret 写错了,或者把账号登录密码当成了 API 密钥。

处理 到 API 密钥页面创建密钥,用它的 id 和 secret 做 Basic 登录。

停止条件 别循环重试:错的密钥不会自己变好。

重试后买多了

检查 重试时换了新的 idempotency_key。同一个 key 会重放之前的订单,新 key 就是一次新购买。

处理 像脚本里那样用「批次标签 + 序号」生成 key,不要用当前时间。

停止条件 下次运行前,先数一下「我的资产」里的行数。

AdsPower 返回 code -1

检查 检查 Local API 是否开启、端口和设置里一致、频率没超过每秒 1 次、请求体符合 Add proxy 页面。

处理 先单独发一个代理看 msg;再按每组最多 500 个发送,调用之间留间隔。

停止条件 只有某一行失败,就把它的主机、端口和账号密码跟「我的资产」逐项核对。

价格与限制

静态 ISP IP 一天 US$0.50,30 天 US$7.99,约合每天 US$0.27,所有国家价格相同。机房 IP 一天 US$0.25,30 天 US$3.99。每个 IP 发放时只带一种协议:HTTP 对应 proxy.proxy302.com 的 2222 端口,SOCKS5 对应 3333 端口。控制台每单「数量」可填 1 到 100。自动续费是可选的,按单个 IP 设置;在控制台下单时默认开启,所以脚本买到的 IP 请核对这项设置,不想续费就在「我的资产」里关掉。没有免费试用,最小购买单位是一个 IP 一天。

常见问题

能用 API 买静态 IP 吗?

能。开放 API 的静态 IP 接口每次调用从钱包买一个 IP,需要国家、套餐 id 和协议。完整接口列表在开发者文档里。

一次调用能买几个 IP?

一个。count 和 format 参数属于动态代理的接口。静态 IP 要循环调用,或者用控制台下单页,「数量」填 1 到 100。

ads_proxy_url 字段里是什么?

登录行,格式 host:port:username:password,大多数指纹浏览器粘贴代理时就接受这个顺序。大批量粘贴前,先在你的浏览器里核对顺序。

脚本要用和控制台不同的密钥吗?

API 密钥在 API 密钥页面创建,和账号登录密码是两回事。每次调用都用它做 HTTP Basic 登录。

同一个脚本能用于比特浏览器吗?

购买和导出两步一样。只有最后一步不同:比特浏览器通过自己的 /browser/update 接口把代理写到窗口上,字段见上表。

查看全部合作伙伴 →

参考资料

7
  1. Proxy302 产品信息与价格表

    产品观察 · 确认日期:

    站点的产品信息文件(数值于 2026 年 10 月 18-19 日对照控制台、后端和价格表核对):以美元计价(1 PTC = 1 美元)、租期、协议和端口、数量上限、没有免费试用。

  2. Proxy302 开发者 API 说明(llms-full.txt)

    官方文档 · 确认日期:

    2026 年 11 月 15 日阅读:认证用 HTTP Basic,用户名是 API 密钥 id,密码是密钥 secret;所有接口都返回 HTTP 200,结果在 code、msg、data 里,code 为 0 才算成功;静态 IP 购买接口需要 country_id、payway_id、protocol 和 8-128 位的 idempotency_key;资产列表返回 ads_proxy_url,格式 host:port:username:password;错误码 50301 包含余额不足和没有库存。

  3. AdsPower Local API:Add proxy

    官方文档 · 确认日期:

    2026 年 11 月 15 日阅读:POST /api/v2/proxy-list/create,字段 type、host、port,可选 user、password、remark;一次最多添加 500 个代理;成功时返回 code 0 和代理 id 列表。页面没有给出请求体示例。

  4. AdsPower Local API:New Profile V2

    官方文档 · 确认日期:

    2026 年 11 月 15 日阅读:POST /api/v2/browser-profile/create 必须有 group_id 和 fingerprint_config,并且 user_proxy_config 与 proxyid(已保存的代理 id,或 random)二选一。

  5. AdsPower Local API README(GitHub)

    官方文档 · 确认日期:

    2026 年 11 月 15 日阅读:默认地址 http://local.adspower.net:50325/ 或 http://localhost:50325/,端口可能变化;所有接口的访问频率上限是每秒 1 次;在账号管理、设置、Local API 里开启。

  6. 比特浏览器文档:浏览器接口

    官方文档 · 确认日期:

    2026 年 11 月 15 日阅读:POST /browser/update 不传 id 是创建窗口,传 id 是修改;代理字段 proxyMethod(2 为自定义)、proxyType(noproxy、http、https、socks5)、host、port、proxyUserName、proxyPassword;/browser/proxy/update 可批量改代理。

  7. 比特浏览器文档:本地服务指南

    官方文档 · 确认日期:

    2026 年 11 月 15 日阅读:安装并登录浏览器后,在系统设置里取本地接口 URL;所有请求都是 POST,参数放在 body 里。

准备好试试了吗?

注册账号、充值一次,就能选动态住宅、静态 ISP 或数据中心 IP,几分钟配进你的浏览器。