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

Response Body on response codes over 300 should not be ignored

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Minor
    • Resolution: Fixed
    • 4.5.2
    • 5.3-alpha1
    • HttpClient (classic)
    • None

    Description

      Hello. This is my first time posting an issue to this project. I've done my best to be helpful.

      Many modern RESTful APIs (e.g. Amazon Web Services) will return a generic status description (e.g. "Bad Request") and details in the body of the response on an error (e.g. code 400).

      However the org.apache.http.client.fluent.Response.returnContent() ignores the body (content) on a return code of over or equal to 300, causing the debugging information to be lost. This leads to generic exception messages.

      A possible solution would be to include the body in the exception string, as demonstrated in the below ResponseHandler.

          protected static class FaultTolerantContentResponseHandler
                  extends ContentResponseHandler {
              @Override
              public Content handleResponse(final HttpResponse response)
                      throws HttpResponseException, IOException {
                  final StatusLine statusLine = response.getStatusLine();
                  final HttpEntity entity = response.getEntity();
                  Content content = entity == null ? null : handleEntity(entity);
                  if (statusLine.getStatusCode() >= 300) {
                      String message = statusLine.getReasonPhrase();
                      if (content != null) {
                          message += ", body was " + content.asString();
                      }
                      throw new HttpResponseException(statusLine.getStatusCode(),
                              message);
                  }
                  return content;
              }
          }
      

      Alternatives would be to create a new subclass of HttpResponseException that would have an additional getErrorContent() method to preserve backwards compatibility.

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              designatevoid Michael Peter Gower
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: