首页 > 解决方案 > 即使遵守请求限制,服务器也会不断返回 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'}
---------------
...

标签: apachepython-requestsrate-limitinghttp-status-code-429

解决方案


推荐阅读