Uploaded image for project: 'HttpComponents HttpClient'
  1. HttpComponents HttpClient
  2. HTTPCLIENT-2326

Support any Exception in RetryStrategy

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Minor
    • Resolution: Fixed
    • None
    • 5.4-beta1
    • None
    • None

    Description

      It would be useful to modify HttpRequestRetryExec to allow HttpRequestRetryStrategy to support all kind of exceptions, not only those extending IOException.

      I would like HttpClient to retry requests when facing a TunnelRefusedException (it happens randomly that the proxy refuses the initial connection, but it usually works ok when retrying).

      I have tried extending DefaultHttpRequestRetryStrategy but it can only capture exceptions inheriting from IOException.

      So, maybe HttpRequestRetryStrategy interface should support any kind of Exception  or maybe TunnelRefusedException should be an IOException

       

      This is an example of a stacktrace that I would like to retry:

       

      org.apache.hc.client5.http.ClientProtocolException: CONNECT refused by proxy: HTTP/1.1 500 Internal Server Error
      at org.apache.hc.client5.http.impl.classic.InternalHttpClient.doExecute(InternalHttpClient.java:173)
      at org.apache.hc.client5.http.impl.classic.CloseableHttpClient.execute(CloseableHttpClient.java:245)
      at org.apache.hc.client5.http.impl.classic.CloseableHttpClient.execute(CloseableHttpClient.java:188)
      [...]
      at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
      at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
      at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
      at java.base/java.lang.Thread.run(Thread.java:1583)
      Caused by: org.apache.hc.client5.http.impl.TunnelRefusedException: CONNECT refused by proxy: HTTP/1.1 500 Internal Server Error
      at org.apache.hc.client5.http.impl.classic.ConnectExec.createTunnelToTarget(ConnectExec.java:284)
      at org.apache.hc.client5.http.impl.classic.ConnectExec.execute(ConnectExec.java:151)
      at org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)
      at org.apache.hc.client5.http.impl.classic.ProtocolExec.execute(ProtocolExec.java:192)
      at org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)
      at org.apache.hc.client5.http.impl.classic.HttpRequestRetryExec.execute(HttpRequestRetryExec.java:96)
      at org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)
      at org.apache.hc.client5.http.impl.classic.ContentCompressionExec.execute(ContentCompressionExec.java:152)
      at org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)
      at org.apache.hc.client5.http.impl.classic.RedirectExec.execute(RedirectExec.java:115)
      at org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)
      at org.apache.hc.client5.http.impl.classic.InternalHttpClient.doExecute(InternalHttpClient.java:170)

      Attachments

        Activity

          People

            Unassigned Unassigned
            ofrias Oscar
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: