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`类库...
在探讨“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对象绘制自己的控件样式,例如改变选中标签的颜色、形状、边框等。同时,可以利用...
在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 = "王思聪"; @...
在ASP.NET开发中,URL重写是一个非常重要的技术,它能帮助我们创建更美观、更具SEO优化的URL,同时也有助于系统架构的优化。本文将深入探讨“URL重写动态链接库”的相关知识点,包括URL重写的基本概念、工作原理、...
URL重写是Web开发中的一个重要概念,主要用于优化网站的URL结构,提高用户体验并有利于搜索引擎优化(SEO)。在ASP.NET环境中,Microsoft提供了URL重写模块,使得开发者能够方便地实现URL的美化和管理。本实例主要...
在IIS中,URL重写组件是一个非常关键的工具,它允许管理员根据预定义的规则改变请求的URL,从而优化网站的SEO(搜索引擎优化),改善用户体验,以及实现各种高级路由策略。 **一、URL重写的概念** URL重写是指将...
例如,创建一个Global.asax.cs文件并在`Application_BeginRequest`方法中添加重写逻辑: ```csharp protected void Application_BeginRequest(object sender, EventArgs e) { var context = HttpContext.Current; ...
通过以上步骤,我们成功地在C#中实现了按钮控件的重写,创建了一个具有独特外观和行为的“漂亮”按钮。这样的自定义按钮可以根据项目需求进行各种定制,提升用户体验,同时使代码更具可维护性和可扩展性。