docs: private ExecuteResult execute(HttpConnection connection) {
  
          InputStream inputStream = null; // input stream - response from server on success
          InputStream errorStream = null; // error stream - response from server for a 500 etc
          String responseMessage = null;
          int responseCode = -1;
          Throwable cause = null;
  
          // first try to execute our request and get the input stream with the server's response
          // we want to catch IOException because HttpUrlConnection throws these for non-success
          // responses (eg 404 throws a FileNotFoundException) but we need to map to our own
          // specific exceptions
          try {
              inputStream = connection.execute().responseAsInputStream();
          } catch (IOException ioe) {
              cause = ioe;
          }
  
          // response code and message will generally be present together or not all
          try {
              responseCode = connection.getConnection().getResponseCode();
              responseMessage = connection.getConnection().getResponseMessage();
          } catch (IOException ioe) {
              responseMessage = "Error retrieving server response message";
          }
  
          // error stream will be present or null if not applicable
          errorStream = connection.getConnection().getErrorStream();
  
          try {
              ExecuteResult executeResult = new ExecuteResult(inputStream,
                      errorStream,
                      responseCode,
                      responseMessage,
                      cause
              );
              return executeResult;
          } finally {
              // don't close inputStream as the callee still needs it
              IOUtils.closeQuietly(errorStream);
          }
      }