症状
批量调用的脚本(常见于 Windows + Pythonrequests)间歇性收到 502,打印出来的响应大致是这样:
- 响应正文为空,响应头只有
Connection和Content-Length两个字段 - 网页版控制台一直正常,没有跟着打不开
- 到 调用日志 里查,这些失败请求一条记录都没有
- 脚本按 502 重试,往往要连续失败好几次才成功,退避时间越拉越长
简短回答
这种 502 不是 API易 返回的,而是你电脑上的代理软件(Clash、v2rayN 等)自己生成的。让脚本绕开系统代理就能解决:
requests 里设置 session.trust_env = False,其他语言的做法见下文。怎么判断是不是这种情况
API易 各层返回的响应都有固定特征,和上面的空 502 对不上:
所以只要看到没有
Server、没有 Date、正文为空的 502,基本就能断定它来自代理软件,而不是 API易。
平台侧确实也会出现 502,那种是服务容器短暂重启,网页版会同时打不开,约 1 分钟内恢复,而且响应带完整的响应头和正文。处理方法见 网站或接口返回 502 怎么办。
为什么会被代理接管
- Python
requests会自动读取系统代理。 在 Windows 上,它会读取注册表里的系统代理设置。Clash、v2rayN 这类软件一旦开启「系统代理」,你的脚本就会悄悄走代理,代码里完全看不出来。 - 明文 HTTP 请求由代理代发。 用
http://api.apiyi.com:16888这类明文地址时,代理不是只做透明隧道,而是替你把请求重新发出去。代理节点抖动、切换或超时后,它会直接给你的脚本回一个空的 502。 - 大请求体和高并发会放大问题。 图片编辑一次要上传几 MB 的图片,单次生成要 45 到 70 秒。几十个并发都挤在一个代理节点上,任何一次抖动都会让一批请求同时失败。
解决方法
1
确认脚本有没有走代理
在运行脚本的同一个环境里执行:输出里有
http 或 https 项(比如 127.0.0.1:7890),就说明 requests 默认会走这个代理。2
让脚本绕开代理(任选一种)
- requests
- OpenAI SDK
- 环境变量
- 代理软件
requests.post(..., proxies={"http": None, "https": None})。3
重新跑一小批验证
先用 5 到 10 个并发跑几十次。空 502 消失,就说明是代理的问题。API易 国内可以直连,不需要代理,详见 使用 API 接口需要代理网络吗。
http://api.apiyi.com:16888 是正式提供的明文接口,图片场景用它可以降低延迟(见 图片 API 延迟如何优化),可以继续使用,前提是按上面的方法绕开代理。常见疑问
这些失败的请求会扣费吗?
这些失败的请求会扣费吗?
分两种情况:
- 代理在请求发到 API易 之前就失败了:API易 没收到请求,不会扣费,调用日志里也没有记录。
- 代理在请求已经发出、正在等待结果时断开:API易 可能已经在处理这张图,并照常计费,但结果没能回到你的脚本。
为什么重试几次之后又成功了?
为什么重试几次之后又成功了?
代理节点的抖动通常是间歇性的,重试时刚好赶上节点恢复,请求就过去了。但每次重试都要重新上传整张图,退避时间也越来越长,批量任务的总耗时会明显变长。绕开代理才能根治。
API易 能在服务端帮我修吗?
API易 能在服务端帮我修吗?
修不了。这类失败发生在你本机和 API易 之间的代理上,请求往往根本没有到达 API易,或者是代理主动断开了连接,服务端没有办法干预。
绕开代理之后还是有 502,怎么办?
绕开代理之后还是有 502,怎么办?
先看响应头:如果带
Server、Date,正文是 HTML 或 JSON,那就是平台侧的 502,按 网站或接口返回 502 怎么办 处理。如果持续出现,请把出错时间(注明时区,如 14:30 (UTC+8))和完整响应发给客服。相关文档
网站或接口返回 502 怎么办?
平台侧 502:容器短暂重启,约 1 分钟恢复
使用 API 接口需要代理网络吗?
国内可直连,不需要代理或 VPN
图片 API 延迟如何优化?
HTTP 接口、连接复用与超时设置
如何避免接口超时?
timeout 设置与逐层排查