URLContents content = getURLContent(req, url, authToken);
URLContents content = getURLContent(req, url, authToken, body);
	private void doProxy(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {        AuthToken authToken = getAuthTokenFromCookie(req, resp);        if (authToken == null) {        	return;        }                // sanity check		String target = req.getParameter(TARGET_PARAM);		if (target == null) {			resp.sendError(HttpServletResponse.SC_BAD_REQUEST);			return;		}				URL url = new URL(target);				// check for permission		if (!checkPermissionOnTarget(req, url, authToken)) {			resp.sendError(HttpServletResponse.SC_FORBIDDEN);			return;		}				// fetch the contents		URLContents content = getURLContent(req, url, authToken);		if (content.returnCode != HttpServletResponse.SC_OK) {			resp.setStatus(content.returnCode);		}				InputStream data = new ByteArrayInputStream(content.data);		// uncompress the result if the browser doesn't accept gzip encoding		if (content.isCompressed) {			String acceptEncoding = req.getHeader(ACCEPT_ENCODING);			if (acceptEncoding == null || acceptEncoding.indexOf(ENCODING_GZIP) == -1) {				// uncompress				ZimbraLog.zimlet.debug("compression not supported");				data = new GZIPInputStream(data);			} else {				resp.addHeader(CONTENT_ENCODING, ENCODING_GZIP);			}		}		resp.setContentType(content.contentType);		ByteUtil.copy(data, resp.getOutputStream());		data.close();	}