先说清楚:代理IP接口到底在传什么
很多人第一次接触「代理IP接口」,会以为它是一个非常复杂的东西。其实把话说白了,它就干一件事:你给服务商一个请求,服务商回给你一批可以用的 IP 和端口。
返回的内容通常长这样,一行一个:
112.85.xx.xx:8899
117.28.xx.xx:8899
183.6.xx.xx:8899
或者换成 JSON 格式,方便程序直接解析:
{
"code": 0,
"data": [
{"ip": "112.85.xx.xx", "port": 8899, "expire": 120},
{"ip": "117.28.xx.xx", "port": 8899, "expire": 120}
]
}
拿到之后,你的爬虫、脚本、业务程序把这些 ip:port 填进代理设置里,请求就会从这些 IP 发出去了。所以接口接入要解决的问题一共就三个:怎么请求(RESTful 还是 SDK)、怎么证明是你(鉴权方式)、拿到的 IP 怎么用(提取式还是隧道式)。
RESTful 接口:最通用,也最不容易踩坑
RESTful 接口就是一条普通的 HTTP 链接,你在浏览器里打开都能看到结果。它的好处是不挑语言、不挑环境,Python、Java、Go、PHP、Node、易语言,甚至 Excel 的 Power Query 都能调。
典型写法是这样:
import requests
# 提取链接:在天启HTTP控制台按需求生成后复制过来即可
api = "你在控制台生成的提取链接"
try:
resp = requests.get(api, timeout=10)
result = resp.json()
for item in result["data"]:
proxy = f"http://{item['ip']}:{item['port']}"
proxies = {"http": proxy, "https": proxy}
r = requests.get("http://httpbin.org/ip",
proxies=proxies,
timeout=8)
print("使用代理后的出口IP:", r.text)
except Exception as e:
print("本次提取失败,稍后重试:", e)
几个实际会遇到的细节,提前注意能省很多时间:
1. 提取数量别一次要太多。 短效 IP 有存活时间,一次拿 50 个,等你用到第 20 个的时候前面的可能已经过期了。按并发量取,够用就行。
2. 记得加超时。 不加 timeout 的请求在网络抖动时会一直挂着,程序看起来像卡死,其实是没设超时。上面代码里 timeout=10 就是这个作用。
3. 提取失败要重试,不要直接抛异常。 接口偶尔返回空列表是正常现象,写个两三次重试的逻辑,程序会稳很多。
4. 返回格式选 JSON。 纯文本格式解析起来要靠 split,遇到空行、异常行容易出 bug,JSON 更省心。
SDK:省事,但要看版本和维护情况
SDK 本质上是服务商把 RESTful 接口用某一种语言包了一层,你调一个方法,它在内部帮你拼链接、发请求、解析结果,甚至帮你做重试和 IP 池管理。
它的优点很明显:
代码短。 不用自己拼 URL、不用自己解析 JSON,几行就接完了。
自带细节处理。 好的 SDK 会帮你做超时、重试、IP 池轮换,这些自己写要多花不少工夫。
但它也有需要留意的地方:
语言版本要匹配。 你的项目是 Python 3.6,SDK 只支持 3.9 以上,那就用不了。接入前先看支持范围。
更新要跟着走。 接口协议变了、鉴权规则调了,SDK 不更新就容易报错。建议把 SDK 版本在配置文件里写死,不要盲目升级,出问题好回退。
出问题排查更绕。 SDK 帮你把请求包起来了,报错时你看不到原始的 HTTP 状态码和返回体。建议第一次接入时先用 RESTful 接口手动跑通,确认鉴权、格式都没问题,再换成 SDK。
一个稳妥的判断标准:项目语言是主流语言、对开发速度要求高、团队里没人愿意维护代理调用逻辑 → 用 SDK;语言小众、需要精细控制并发和重试策略、或者要接进已有框架 → 直接用 RESTful。
鉴权方式怎么选:白名单、账号密码、签名 Token
这一步很多人会忽略,结果代码在本地跑得好好的,一部署到服务器就 407 报错。常见的鉴权方式有三类:
IP 白名单。 你在服务商后台把你服务器的出口 IP 加进去,之后从这个 IP 发来的请求就直接放行,代理地址上不用带任何账号密码。
# 白名单模式下,代理地址不带账号密码
proxies = {"http": "http://112.85.xx.xx:8899"}
好处是简单、请求头干净、速度也快。缺点也很直接:出口 IP 一变就失效。家里宽带重启光猫、公司网络换出口、云服务器换弹性 IP,都会导致白名单对不上。所以用白名单要确认自己的出口 IP 是固定的。
账号密码。 代理地址上直接带用户名和密码,格式是 http://用户名:密码@ip:端口。
proxies = {"http": "http://用户名:密码@112.85.xx.xx:8899",
"https": "http://用户名:密码@112.85.xx.xx:8899"}
好处是不用管出口 IP,换机器、换网络、在家在公司都能用,适合团队协作和经常变动环境的场景。要注意密码里有特殊字符(比如 @、#、/)时要先做 URL 编码,不然代理地址会被解析错。
签名 Token。 每次请求带上一个动态生成的凭证,安全性最高,一般用在开放平台或者要求较严格的接口上。这种方式需要你在代码里实现签名计算,接入成本稍高,普通业务场景用前两种就够。
| 鉴权方式 | 适合场景 | 优点 | 要留意的地方 |
|---|---|---|---|
| IP 白名单 | 固定机房的服务器、出口 IP 稳定的业务 | 代理地址干净、无需传账号密码 | 出口 IP 变动后需重新添加 |
| 账号密码 | 本地调试、团队多人使用、出口 IP 会变的环境 | 换机器也能直接跑 | 密码含特殊字符要 URL 编码 |
| 签名 Token | 安全性要求高的接口调用 | 凭证动态生成,泄露风险低 | 需要在代码里实现签名逻辑 |
实际接入时我的建议是:开发调试阶段用账号密码,上线部署到固定服务器后再切白名单。这样本地能跑、线上也安全,两种方式不冲突。
接入四步走:从拿到文档到稳定运行
第一步,先读懂文档里的返回格式。 别急着写代码,先手动用浏览器打开提取链接,看看返回的是 JSON 还是纯文本、字段名叫什么、成功和失败分别是什么样子。这一步花五分钟,能省后面半小时。
第二步,确定鉴权方式并配置好。 按上一节的原则选,白名单就把服务器出口 IP 加进后台,账号密码就确认用户名密码正确、特殊字符处理没问题。
第三步,写提取和使用的逻辑。 提取到 IP 后,记得在代码里组装成你所用库要求的格式。比如 requests 用 http://ip:port,有些库需要拆成 host 和 port 分别传。
第四步,把失败重试和 IP 轮换补上。 这是区分「能跑」和「跑得稳」的关键。一个简单的思路是:请求失败 → 标记当前 IP 不可用 → 从池子里换一个 → 重试,重试三次还失败就重新调接口提取。
还有几个容易被忽略的点:
协议要选对。 目标站点是 HTTP 还是 HTTPS,代理要跟着选。有些场景需要 SOCKS5,也要提前确认服务商支持哪些协议。
提取式还是隧道式。 提取式是每次调接口拿一批 IP 自己管理;隧道式是给你一个固定的入口地址,服务商在背后自动帮你换 IP,代码里只写一个代理地址就行。业务量大、不想自己维护 IP 池的,隧道式会轻松很多。
并发别开太猛。 再好的接口也扛不住一瞬间几百个并发提取,按实际需要控制频率,对业务和对接口都更友好。
天启HTTP 的接口能力
天启HTTP 提供国内代理IP服务,接入方式上对开发者比较友好:控制台可以自助生成 API 提取链接,拿到后直接用 RESTful 方式调用,返回 JSON 格式方便解析;同时也支持隧道代理接入,代码里只配一个固定入口即可。
鉴权上支持 IP 白名单和用户名密码两种方式,开发期用账号密码调试、上线后切白名单,两种模式可以按需切换。协议上覆盖 HTTP、HTTPS、SOCKS5,常见语言的接入示例在技术文档里都能找到,接入过程中遇到问题也可以直接找技术支持协助排查。
需要说明的是,天启HTTP 的代理IP面向国内业务场景,如果你的项目需要海外网络环境,这套方案并不适用。
常见问题
Q:接口能调通,但程序跑起来还是报 407,是什么原因?
407 基本都是鉴权没过。检查三件事:白名单里加的出口 IP 是不是当前服务器的真实出口 IP;账号密码有没有写错或漏了 URL 编码;代理地址的格式是不是 http://用户名:密码@ip:端口,少写 http:// 也会失败。
Q:本地能跑,部署到服务器就提取失败?
八成是白名单问题。本地宽带的出口 IP 和云服务器的出口 IP 不是一个,需要在后台把服务器的出口 IP 也加进去,或者干脆改用账号密码鉴权。
Q:RESTful 和 SDK 可以同时用吗?
可以,两者底层调的是同一套接口。常见做法是核心业务用 RESTful 精细控制,辅助脚本用 SDK 快速开发,不冲突。
Q:提取到的 IP 一定都能用吗?
短效 IP 有存活周期,提取后尽快使用,用之前可以先做一次连通性探测。同时在代码里做好失败重试和 IP 轮换,单次失败不影响整体任务。
Q:一次提取多少个 IP 比较合适?
看并发量。一般按「并发数 × 1.5」来取就够,取多了用不完会过期浪费。业务量大的话建议直接用隧道模式,省去自己维护 IP 池的麻烦。
Q:接口返回格式可以自己选吗?
通常支持 JSON 和纯文本两种,在生成提取链接时选择即可。程序解析推荐 JSON,手工测试用纯文本更直观。





