繁体   English   中英

如何避免 python 中的 429 错误 requests.get()?

[英]how to avoid 429 error requests.get() in python?

我正在尝试使用 requests.get() 从 pubg API 获取一些数据。

代码执行时,response.status_code 返回 429。

拿到429后,200就拿不到了。

如何解决这种情况?

这是我的代码的一部分。

for num in range(len(platform)):
   url = "https://api.pubg.com/shards/"+platform[num]+"/players/"+playerID[num]+"/seasons/"+seasonID+"/ranked"
   req = requests.get(url, headers=header)
   print(req.status_code)
[output]
200
429

根据https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429

您一次/在短时间内发送了太多请求。 我推荐使用time.sleep(10)

import time


for num in range(len(platform)):
   ....
   ....
   time.sleep(10)

我用了 10 秒,但你必须测试它并了解需要多少时间间隔。 我还建议您在确定合适的睡眠时间后使用https://pypi.org/project/retry/

正如 sam 所提到的,HTTP 错误 429 意味着您在一定时间内发出了太多请求。

根据官方 PUBG API 文档,API 实际上通过在每个请求中发送一个名为X-RateLimit-Limit的额外 header 来告诉您这些速率限制。 每个请求还有一个名为X-RateLimit-Remaining的 header,它会告诉您当前还有多少请求,直到下一次速率重置发生在第三个 header X-RateLimit-Reset中指定的时间。

由于您似乎使用了请求库,因此在 python 中发出请求后,您可以使用简单的req.headers访问这些标头。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM