最近帮朋友排查一个自动化任务的问题:他在一台 Ubuntu 服务器上跑了个 Python 脚本,每天定时调用海外某数据 API 拉取数据。脚本逻辑没问题,白天手动跑都能成功,但一到凌晨就频繁超时,偶尔返回 403。
他一开始怀疑是 API 限流,但查了调用频率并不高。后来抓包发现,问题出在服务器的网络出口上。
脚本部署在一台云服务器上,通过 crontab 定时执行。白天手动执行或者临时跑一次,基本都能成功。但凌晨 2 点、4 点、6 点的定时任务,失败率极高,报错集中在:
requests.exceptions.ReadTimeoutHTTPError 403 Client Error用 curl 手动测试同样的 URL,白天能通,凌晨也经常超时。
第一步:确认目标 API 是否可达
# 持续 ping 目标 API 域名,观察丢包和延迟
ping -c 100 api.example.com结果:白天延迟稳定在 80-120ms,凌晨延迟飙升到 400ms 以上,丢包率 10%-20%。
第二步:检查服务器出口 IP 是否被限流
用 mtr 跟踪路由:
mtr -r -c 100 api.example.com发现从服务器到目标 API 之间的中间节点存在明显丢包,且晚高峰和凌晨时段尤其严重。
第三步:检查出口 IP 的“身份”
访问 IP 检测服务,确认服务器出口 IP 的 ASN 归属。结果显示,这个 IP 属于某云服务商的数据中心网段。
很多海外 API 服务商会对数据中心 IP 段做速率限制或信誉降级。因为这些 IP 往往被大量脚本、爬虫、自动化工具使用,服务商为了保障普通用户的访问质量,会对机房 IP 采取更严格的限制策略。
这就是为什么白天手动跑还能成功,凌晨定时任务却频繁失败——凌晨是各地自动化任务集中运行的时间段,机房 IP 段的“竞争”更激烈,更容易触发限流。
既然是出口 IP 的问题,解决方案就是换一个更“干净”的网络出口。住宅 IP 的 ASN 归属于当地运营商,在 API 服务商的信誉体系中优先级更高,不会被当作机房流量限流。
以下是以 1024Proxy 住宅 IP 为例的配置方式(仅作示例,按需替换为任意住宅 IP 服务):
# ============================================
# 使用住宅 IP 作为网络出口示例
# 住宅 IP 服务:1024Proxy
# 官网:https://1024proxy.com/?kwd=hyj-txy
# ============================================
import requests
import time
# 从服务商后台获取的代理信息
proxy_url = "http://用户名:密码@gateway.1024proxy.com:端口"
proxies = {
"http": proxy_url,
"https": proxy_url
}
def fetch_data(api_url):
"""带重试的数据拉取函数"""
for attempt in range(3):
try:
response = requests.get(
api_url,
proxies=proxies,
timeout=(5, 30) # 连接超时 5s,读取超时 30s
)
if response.status_code == 200:
return response.json()
elif response.status_code == 403:
print(f"403 被限制,第 {attempt+1} 次重试")
time.sleep(2 ** attempt) # 指数退避
except requests.exceptions.Timeout:
print(f"超时,第 {attempt+1} 次重试")
time.sleep(2 ** attempt)
return None
# 调用示例
data = fetch_data("https://api.example.com/data")将脚本中的出口切换为住宅 IP 后,凌晨定时任务的失败率大幅下降。同样的 API,同样的调用频率,稳定性明显改善。
设置合理的重试与退避:在代码中加入指数退避重试,避免一次抖动导致任务失败。
错峰执行:如果目标 API 在凌晨压力大,可以将定时任务调整到凌晨 1 点或 5 点,避开整点高峰。
监控出口 IP 的可用性:定期用 curl 测试出口 IP 的连通性,如果发现持续超时,及时切换。
不要用免费代理:免费代理通常共享严重,IP 信誉极差,反而更容易触发限流。
服务器上的自动化任务如果频繁在网络层失败,不一定是代码问题,很可能是出口 IP 被目标服务限流。数据中心 IP 在海外 API 的信誉体系中天然处于劣势,更换为住宅 IP 出口通常能显著改善稳定性。以上排查思路和配置方法供参考,具体服务商可根据实际需求测试选择。
本文仅做技术交流,请遵守相关平台规则与法律法规。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。