org.springframework.web.client.HttpClientErrorException: 429 Too Many Requests

简介: org.springframework.web.client.HttpClientErrorException: 429 Too Many Requests

http 429错误码

4.  429 Too Many Requests
   The 429 status code indicates that the user has sent too many
   requests in a given amount of time ("rate limiting").
   The response representations SHOULD include details explaining the
   condition, and MAY include a Retry-After header indicating how long
   to wait before making a new request.
   For example:
   HTTP/1.1 429 Too Many Requests
   Content-Type: text/html
   Retry-After: 3600
   <html>
      <head>
         <title>Too Many Requests</title>
      </head>
      <body>
         <h1>Too Many Requests</h1>
         <p>I only allow 50 requests per hour to this Web site per
            logged in user.  Try again soon.</p>
      </body>
   </html>
   Note that this specification does not define how the origin server
   identifies the user, nor how it counts requests.  For example, an
   origin server that is limiting request rates can do so based upon
   counts of requests on a per-resource basis, across the entire server,
   or even among a set of servers.  Likewise, it might identify the user
   by its authentication credentials, or a stateful cookie.
   Responses with the 429 status code MUST NOT be stored by a cache.

HttpClientErrorException for status HTTP 429 Too Many Requests

用户在在指定的时间里发送了太多的请求。用于限制速率。属于客户端异常,既客户端没有遵守服务端给定的一定频率内的限制访问次数。

一般而言,当服务端检测到客户端在短时间内频繁的尝试访问特定页面时,它会触发速率限制功能。最常见的例子是用户(或攻击者)反复多次地尝试调用登录接口。

所以当出现429错误的时候,就意味着有一个用户或一段代码被太多次的请求,继而触发了服务端的限速功能。

解决方式

收到429状态码并不是一个常规意义上的错误,因为你的请求率太高了,服务器已经被搞的受不了了。所以我们可以把他理解为服务端“友好”要求客户端降低请求频率。

1)让进程休眠。服务器通常在响应中包含一个Retry-after头,其中包含在重试之前应该等待的秒数。请记住,休眠进程可能会导致问题,例如在任务队列中,你应该在稍后重试该任务,以释放该工作进程用于其他事情。

if response.status_code == 429:
time.sleep(int(response.headers["Retry-After"]))

2)指数退避算法。如果服务器没有告诉您需要等待多长时间,那么您可以通过增加暂停时间来重试请求。还可以避免因为任务重试中的集中请求而被再次限流。因为重试时又会有大量的请求在同一时刻涌入,会不断地造成限流。

3)令牌桶。如果您提前知道在给定的时间内能够发出多少请求,那么这种技术就很有用。每次访问API时,首先从桶中获取一个令牌。桶以恒定的速度重新装满。如果桶是空的,我们就知道再次访问API之前必须等待。

如果服务端的限速配置的不正确那就是另外一回事了。由于大多数速率限制是通过IP来标识访问者,这可能会在动态共享IP的场景中出现问题。如果一个人都没有发几个请求,但是一直收到429状态码的话,可以联系服务端的配置人员。

 

参考文章

https://www.rfc-editor.org/rfc/rfc6585#page-3

https://developer.aliyun.com/article/748634

https://www.docs4dev.com/apidocs/zh/spring/5.2.12.RELEASE/org/springframework/web/client/HttpClientErrorException.TooManyRequests.html

 

本篇文章如有帮助到您,请给「翎野君」点个赞,感谢您的支持。

目录
相关文章
|
8月前
|
数据采集 JavaScript 前端开发
Web爬虫开发指南:使用Python的BeautifulSoup和Requests库
Web爬虫是一种从互联网上获取数据的自动化工具,它可以用于抓取网页内容、提取信息和分析数据。Python提供了一些强大的库,其中BeautifulSoup和Requests是两个常用的工具,用于解析HTML内容和发起HTTP请求。本文将介绍如何使用BeautifulSoup和Requests库构建一个简单而有效的Web爬虫。
|
数据安全/隐私保护
Web Spider Sunwing.ca requests下单 请求参数介绍(一)
Web Spider Sunwing.ca requests下单 请求参数介绍(一)
69 0
Web Spider Sunwing.ca requests下单 请求参数介绍(一)
|
数据采集 数据安全/隐私保护 计算机视觉
1、web爬虫,requests请求
requests请求,就是用python的requests模块模拟浏览器请求,返回html源码。 模拟浏览器请求有两种,一种是不需要用户登录或者验证的请求,一种是需要用户登录或者验证的请求。
1212 0
|
数据库 Python 数据安全/隐私保护
Python网络爬虫(requests, 代理,Web认证, SSL证书认证)
python、python爬虫、网络爬虫、爬虫框架、selenium、requests、urllib、数据分析、大数据、爬虫爬取静态网页、爬虫基础
6665 0
|
Web App开发 Python
Python crawler access to web pages the get requests a cookie
Python in the process of accessing the web page,encounter with cookie,so we need to get it. cookie in Python is form of a dictionary exists ,so coo...
1425 0
|
测试技术 Python 数据格式
Python nose单元测试框架结合requests库进行web接口测试
[本文出自天外归云的博客园] 之前写过一篇关于nose使用方法的博客。最近在做一元乐购产品的接口测试,结合着python的requests库可以很方便的进行web接口测试并生成测试结果。接口测试脚本示例如下(脚本路径为“E:\forPytest\test_new_product_detail.
1003 0
|
6天前
|
JavaScript 程序员 应用服务中间件
快速入门Web开发(上) 黑马程序员JavaWeb开发教程(2)
快速入门Web开发(上) 黑马程序员JavaWeb开发教程(2)
20 7
|
6天前
|
XML 存储 JavaScript
快速入门Web开发(上) 黑马程序员JavaWeb开发教程(1)
快速入门Web开发(上) 黑马程序员JavaWeb开发教程(1)
18 5
|
3天前
|
安全 编译器 API
探索PHP 8的新特性及其对现代Web开发的影响
随着PHP 8的正式发布,这一版本带来了多项重大改进和新特性,旨在提升性能、增加语言的灵活性并简化开发流程。本文将详细探讨PHP 8中的关键更新,包括JIT编译器、联合类型、命名参数、匹配表达式等,并分析这些新特性如何影响现代Web开发的实践。通过引用最新的性能数据和开发者反馈,我们将深入理解PHP 8带来的变革,以及它对现有项目和未来趋势的潜在影响。
|
3天前
|
安全 大数据 PHP
深入理解PHP 7中的新特性及其对现代Web开发的影响
【6月更文挑战第28天】本文将深入探讨PHP 7带来的革新,从性能提升到语法改进,揭示这些变化如何重塑Web开发领域。我们将一窥未来PHP的发展趋势,并分析开发者如何利用这些新特性来构建更快、更安全、更易于维护的应用程序。
9 1