@Override public InputStream getContent() throws IOException { InputStream in; try { successful = true; in = connection.getInputStream(); } catch (IOException e) { successful = false; in = connection.getErrorStream(); if (in == null) { throw e; } } String encoding = connection.getHeaderField("Content-Encoding"); if (config.getMaxResponseSize() > 0) { in = new LimitingInputStream(config.getMaxResponseSize(), in); } if ("gzip".equals(encoding)) { in = new GZIPInputStream(in); } if (config.hasMessageHandlers() || config.isTraceMessage()) { byte[] bytes = FileUtil.toBytes(in); in = new ByteArrayInputStream(bytes); if (config.hasMessageHandlers()) { Iterator<MessageHandler> it = config.getMessagerHandlers(); while (it.hasNext()) { MessageHandler handler = it.next(); if (handler instanceof MessageHandlerWithHeaders) { ((MessageHandlerWithHeaders) handler) .handleResponse(url, bytes, connection.getHeaderFields()); } else { handler.handleResponse(url, bytes); } } } if (config.isTraceMessage()) { new TeeInputStream(config, bytes); } } return in; }
private OutputStream wrapOutput(OutputStream output, boolean enableCompression) throws IOException { if (config.getMaxRequestSize() > 0) { output = new LimitingOutputStream(config.getMaxRequestSize(), output); } // when we are writing a zip file we don't bother with compression if (enableCompression && config.isCompression()) { output = new GZIPOutputStream(output); } if (config.isTraceMessage()) { output = new TeeOutputStream(output); } if (config.hasMessageHandlers()) { output = new MessageHandlerOutputStream(output); } return output; }