apache - 即使遵守请求限制,服务器也会不断返回 429
问题描述
我正在从公司的 API 下载一些数据。根据其 API 文档,特定端点的请求限制为 60 / 1 分钟。在第 60 个请求之后,我不断收到 429 响应,即使在每个请求后等待 2 秒也是如此。'X-RateLimit-Remaining' 似乎只是从 60 倒计时到 0,但在某些情况下,它也会在某个随机时刻重置回 60。我在这里想念什么?
import requests
import time
token = ''
header = {'Content-Type': 'application/json', 'Accept': 'application/json',
'Authorization': 'Bearer {}'.format(token)}
for i in range(70):
response = requests.get('', headers=header, timeout=10)
print(i)
print(response.status_code)
print(response.headers)
print('---------------')
time.sleep(2)
结果:
0
200
{'Date': 'Tue, 01 Jun 2021 17:43:57 GMT', 'Server': 'Apache', 'Cache-Control': 'no-cache, private', 'X-
RateLimit-Limit': '60', 'X-RateLimit-Remaining': '58', 'Access-Control-Allow-Origin': '*', 'Content-
Encoding': 'gzip', 'Vary': 'Accept-Encoding,Authorization', 'X-Frame-Options': 'SAMEORIGIN', 'Transfer-
Encoding': 'chunked', 'Content-Type': 'application/json'}
---------------
1
200
{'Date': 'Tue, 01 Jun 2021 17:44:03 GMT', 'Server': 'Apache', 'Cache-Control': 'no-cache, private', 'X-
RateLimit-Limit': '60', 'X-RateLimit-Remaining': '57', 'Access-Control-Allow-Origin': '*', 'Content-
Encoding': 'gzip', 'Vary': 'Accept-Encoding,Authorization', 'X-Frame-Options': 'SAMEORIGIN', 'Transfer-
Encoding': 'chunked', 'Content-Type': 'application/json'}
---------------
...
58
200
{'Date': 'Tue, 01 Jun 2021 17:48:23 GMT', 'Server': 'Apache', 'Cache-Control': 'no-cache, private', 'X-
RateLimit-Limit': '60', 'X-RateLimit-Remaining': '0', 'Access-Control-Allow-Origin': '*', 'Content-
Encoding': 'gzip', 'Vary': 'Accept-Encoding,Authorization', 'X-Frame-Options': 'SAMEORIGIN', 'Transfer-
Encoding': 'chunked', 'Content-Type': 'application/json'}
---------------
59
429
{'Date': 'Tue, 01 Jun 2021 17:48:25 GMT', 'Server': 'Apache', 'X-RateLimit-Limit': '60', 'X-RateLimit-
Remaining': '0', 'Retry-After': '86', 'X-RateLimit-Reset': '1622569791', 'Cache-Control': 'no-cache,
private', 'Access-Control-Allow-Origin': '*', 'Content-Encoding': 'gzip', 'Vary': 'Accept-
Encoding,Authorization', 'X-Frame-Options': 'SAMEORIGIN', 'Transfer-Encoding': 'chunked', 'Content-Type':
'application/json'}
---------------
60
429
{'Date': 'Tue, 01 Jun 2021 17:48:27 GMT', 'Server': 'Apache', 'X-RateLimit-Limit': '60', 'X-RateLimit-
Remaining': '0', 'Retry-After': '84', 'X-RateLimit-Reset': '1622569791', 'Cache-Control': 'no-cache,
private', 'Access-Control-Allow-Origin': '*', 'Content-Encoding': 'gzip', 'Vary': 'Accept-
Encoding,Authorization', 'X-Frame-Options': 'SAMEORIGIN', 'Transfer-Encoding': 'chunked', 'Content-Type':
'application/json'}
---------------
...
解决方案
推荐阅读
- c# - 为什么我的 .NET Web API 应用程序在使用 docker-compose 时无法连接到 docker 上的 MySQL?
- android - 在核心模块中启用 Android 数据绑定不起作用
- c# - 在每次构建时在 Visual Studio C# 中运行预构建事件,而不总是触发目标重新构建
- asp.net-core - 将 Asp Net Core Web API 项目添加到 MVC 项目
- mysql - 我可以动态地将新属性添加到 Laravel 中的现有表吗?
- java - 无法使用 NavigationUI 创建底部导航
- python - 计算值出现的百分比
- vue.js - vue-filepond 组件中已上传文件的预览
- python - 无法创建 Heroku postgresSql 表
- mysql - spring data r2dbc 使用@Transaction 有一个缓存