HttpRequestRetryHandler myRetryHandler = new HttpRequestRetryHandler() { public boolean retryRequest( IOException exception, int executionCount, HttpContext context) { if (executionCount >= 5) { // Do not retry if over max retry count return false; } if (exception instanceof InterruptedIOException) { // Timeout return false; } if (exception instanceof UnknownHostException) { // Unknown host return false; } if (exception instanceof ConnectTimeoutException) { // Connection refused return false; } if (exception instanceof SSLException) { // SSL handshake exception return false; } HttpClientContext clientContext = HttpClientContext.adapt(context); HttpRequest request = clientContext.getRequest(); boolean idempotent = !(request instanceof HttpEntityEnclosingRequest); if (idempotent) { // Retry if the request is considered idempotent return true; } return false; } }; CloseableHttpClient httpclient = HttpClients.custom() .setRetryHandler(myRetryHandler) .build();
https://hc.apache.org/httpcomponents-client-ga/tutorial/html/fundamentals.html
不知道有多少人在重写HttpRequestRetryHandler 的时候直接copy了官网的这段代码,然后修改
结果综合测试里,get可以retry没问题,post死活过不了
查了几个小时后,终于发现在1.4.2里有以下说明
HttpClient assumes non-entity enclosing methods such as GET
and HEAD
to be idempotent and entity enclosing methods such as POST
and PUT
to be not.
一切恍然大悟
删掉以下代码,直接返回true进行retry即可
HttpClientContext clientContext = HttpClientContext.adapt(context); HttpRequest request = clientContext.getRequest(); boolean idempotent = !(request instanceof HttpEntityEnclosingRequest); if (idempotent) {
相关推荐
在微信小程序开发中,"重写App、重写Page与自定义分享"是常见的需求,它们涉及到小程序的基础架构和用户体验优化。以下将详细介绍这些概念及其应用。 **重写App** `App`是微信小程序的全局应用程序对象,它包含了...
在提供的压缩包`UrlReWriterModel`中,很可能包含了实现URL重写的一个模型或示例代码。这个模型可能包括了配置文件、URL重写规则以及对应的控制器或处理程序。例如,如果这是一个ASP.NET的示例,`web.config`文件里...
2. **UrlWriter的作用**:UrlWriter是一个特定的工具,它可能是一个类库、框架的一部分,或者是服务器配置文件中的指令集,负责解析和构建重写后的URL。使用UrlWriter,开发者可以定义一系列规则来控制URL的格式。 ...
URL重写是一种机制,它允许开发人员将一个URL映射到另一个URL,而不会改变实际请求的资源。在ASP.NET中,这通常通过使用IIS(Internet Information Services)的URL重写模块或者Microsoft的`System.Web.Routing`类库...
这段代码开启重写引擎,当请求以`news/`开头且后面跟着一个数字的URL时,会将请求重定向到`index.php?id=`加上匹配到的数字。 六、URL重写注意事项 1. 避免循环重定向:确保规则设置正确,防止URL被无限重写。 2. ...
URL重写是Web开发中的一种技术,主要用于优化和管理网站的URL结构,使其更符合搜索引擎优化(SEO)标准,提高用户体验,并便于服务器管理和应用程序处理。...正确配置和理解URL重写规则是每个Web开发者必备的技能之一。
当用户通过浏览器输入一个经过重写的URL时,服务器会通过特定规则将这个友好的URL解析为实际处理请求的URL,然后进行相应的服务响应。这一过程通常涉及到HTTP服务器的配置文件,如Apache的`.htaccess`文件或IIS的web...
在探讨“jsp的一个url重写”这一主题时,我们深入解析了达内郑州中心老师分享的关于URL重写的实现方式,这不仅展示了JSP技术在动态网页开发中的灵活性,也揭示了URL重写在提高用户体验、优化SEO以及简化URL结构方面...
Url重写是Web开发中的一个重要概念,主要用于优化和管理网站的网址结构,使其更符合搜索引擎优化(SEO)标准,同时也可提升用户体验。无后缀Url重写是指在URL中不显示传统的文件扩展名,如.aspx、.html等,使网址看...
IIS URL重写模块是一个可下载的扩展,可以直接在IIS服务器上安装。在C#中,我们可以在web.config配置文件中编写重写规则。例如,以下规则将`/oldpage.aspx`重定向到`/newpage`: ```xml ^oldpage\.aspx$" /...
描述中的“.net重写url的工具”进一步确认了我们正在讨论的是一个专门针对.NET环境的URL重写解决方案。 URL重写在现代Web开发中扮演着关键角色,因为它有助于提高用户体验,改善搜索引擎优化(SEO),并使网站保持...
C#重写MessageBox对话框C#重写MessageBox对话框C#重写MessageBox对话框C#重写MessageBox对话框C#重写MessageBox对话框C#重写MessageBox对话框C#重写MessageBox对话框
1. **自定义控件的外观**:在C#中,可以创建一个继承自TabControl的类,然后覆盖OnPaint方法。在这个方法里,你可以使用Graphics对象绘制自己的控件样式,例如改变选中标签的颜色、形状、边框等。同时,可以利用...
URL重写是Web开发中的一个重要概念,主要用于优化网站的URL结构,提高用户体验,以及更好地适应搜索引擎优化(SEO)的需求。在ASP.NET环境中,一个常用的URL重写库是UrlRewriting.Net,它允许开发者通过配置规则来...
在JavaScript编程中,`window.alert()` 是一个内置的全局函数,用于向用户显示警告对话框,通常包含一条消息和一个“确定”按钮。这个方法在网页开发中常用于简单的信息提示,但有时开发者可能需要自定义其行为,...
Java 中的 URL 重写是一种常用的技术,它可以将原始的 URL 转换为另一个 URL,以便达到特定的目的。例如,隐藏真实的 URL、实现 URL 的加密、实现 URL 的重定向等。在 Java 中,有多种方式可以实现 URL 重写,包括...
本篇文章将围绕“C# 多个ListView重写控件”这一主题,详细介绍如何实现一个更加易用且功能丰富的ListView。 首先,`A Much Easier to Use ListView - CodeProject.mht`文件可能是一个关于改进ListView的代码项目...
【标题】:“重写的一个heart程序” 在编程领域,重写一个程序通常意味着对原有的代码进行重构,以改进其设计、性能或者兼容性。在这个案例中,提到的是一个名为“heart”的程序,它最初可能是由你的高中同桌在...
System.out.println("先定义小目标,挣他一个亿..."); return null; } static void test() { System.out.println("父类静态方法"); } } class SiCong extends JianLin { String name = "王思聪"; @...
通过以上步骤,我们成功地在C#中实现了按钮控件的重写,创建了一个具有独特外观和行为的“漂亮”按钮。这样的自定义按钮可以根据项目需求进行各种定制,提升用户体验,同时使代码更具可维护性和可扩展性。