List of usage examples for java.net HttpURLConnection HTTP_NOT_MODIFIED
int HTTP_NOT_MODIFIED
To view the source code for java.net HttpURLConnection HTTP_NOT_MODIFIED.
Click Source Link
From source file:org.apache.cordova.filetransfer.FileTransfer.java
/** * Downloads a file form a given URL and saves it to the specified directory. * * @param source URL of the server to receive the file * @param target Full path of the file on the file system *//*from w w w . j a va 2 s . c o m*/ private void download(final String source, final String target, JSONArray args, CallbackContext callbackContext) throws JSONException { Log.d(LOG_TAG, "download " + source + " to " + target); final CordovaResourceApi resourceApi = webView.getResourceApi(); final boolean trustEveryone = args.optBoolean(2); final String objectId = args.getString(3); final JSONObject headers = args.optJSONObject(4); final Uri sourceUri = resourceApi.remapUri(Uri.parse(source)); // Accept a path or a URI for the source. Uri tmpTarget = Uri.parse(target); final Uri targetUri = resourceApi .remapUri(tmpTarget.getScheme() != null ? tmpTarget : Uri.fromFile(new File(target))); int uriType = CordovaResourceApi.getUriType(sourceUri); final boolean useHttps = uriType == CordovaResourceApi.URI_TYPE_HTTPS; final boolean isLocalTransfer = !useHttps && uriType != CordovaResourceApi.URI_TYPE_HTTP; if (uriType == CordovaResourceApi.URI_TYPE_UNKNOWN) { JSONObject error = createFileTransferError(INVALID_URL_ERR, source, target, null, 0, null); Log.e(LOG_TAG, "Unsupported URI: " + sourceUri); callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.IO_EXCEPTION, error)); return; } /* This code exists for compatibility between 3.x and 4.x versions of Cordova. * Previously the CordovaWebView class had a method, getWhitelist, which would * return a Whitelist object. Since the fixed whitelist is removed in Cordova 4.x, * the correct call now is to shouldAllowRequest from the plugin manager. */ Boolean shouldAllowRequest = null; if (isLocalTransfer) { shouldAllowRequest = true; } if (shouldAllowRequest == null) { try { Method gwl = webView.getClass().getMethod("getWhitelist"); Whitelist whitelist = (Whitelist) gwl.invoke(webView); shouldAllowRequest = whitelist.isUrlWhiteListed(source); } catch (NoSuchMethodException e) { } catch (IllegalAccessException e) { } catch (InvocationTargetException e) { } } if (shouldAllowRequest == null) { try { Method gpm = webView.getClass().getMethod("getPluginManager"); PluginManager pm = (PluginManager) gpm.invoke(webView); Method san = pm.getClass().getMethod("shouldAllowRequest", String.class); shouldAllowRequest = (Boolean) san.invoke(pm, source); } catch (NoSuchMethodException e) { } catch (IllegalAccessException e) { } catch (InvocationTargetException e) { } } if (!Boolean.TRUE.equals(shouldAllowRequest)) { Log.w(LOG_TAG, "Source URL is not in white list: '" + source + "'"); JSONObject error = createFileTransferError(CONNECTION_ERR, source, target, null, 401, null); callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.IO_EXCEPTION, error)); return; } final RequestContext context = new RequestContext(source, target, callbackContext); synchronized (activeRequests) { activeRequests.put(objectId, context); } cordova.getThreadPool().execute(new Runnable() { public void run() { if (context.aborted) { return; } HttpURLConnection connection = null; HostnameVerifier oldHostnameVerifier = null; SSLSocketFactory oldSocketFactory = null; File file = null; PluginResult result = null; TrackingInputStream inputStream = null; boolean cached = false; OutputStream outputStream = null; try { OpenForReadResult readResult = null; file = resourceApi.mapUriToFile(targetUri); context.targetFile = file; Log.d(LOG_TAG, "Download file:" + sourceUri); FileProgressResult progress = new FileProgressResult(); if (isLocalTransfer) { readResult = resourceApi.openForRead(sourceUri); if (readResult.length != -1) { progress.setLengthComputable(true); progress.setTotal(readResult.length); } inputStream = new SimpleTrackingInputStream(readResult.inputStream); } else { // connect to server // Open a HTTP connection to the URL based on protocol connection = resourceApi.createHttpConnection(sourceUri); if (useHttps && trustEveryone) { // Setup the HTTPS connection class to trust everyone HttpsURLConnection https = (HttpsURLConnection) connection; oldSocketFactory = trustAllHosts(https); // Save the current hostnameVerifier oldHostnameVerifier = https.getHostnameVerifier(); // Setup the connection not to verify hostnames https.setHostnameVerifier(DO_NOT_VERIFY); } connection.setRequestMethod("GET"); // TODO: Make OkHttp use this CookieManager by default. String cookie = getCookies(sourceUri.toString()); if (cookie != null) { connection.setRequestProperty("cookie", cookie); } // This must be explicitly set for gzip progress tracking to work. connection.setRequestProperty("Accept-Encoding", "gzip"); // Handle the other headers if (headers != null) { addHeadersToRequest(connection, headers); } connection.connect(); if (connection.getResponseCode() == HttpURLConnection.HTTP_NOT_MODIFIED) { cached = true; connection.disconnect(); Log.d(LOG_TAG, "Resource not modified: " + source); JSONObject error = createFileTransferError(NOT_MODIFIED_ERR, source, target, connection, null); result = new PluginResult(PluginResult.Status.ERROR, error); } else { if (connection.getContentEncoding() == null || connection.getContentEncoding().equalsIgnoreCase("gzip")) { // Only trust content-length header if we understand // the encoding -- identity or gzip if (connection.getContentLength() != -1) { progress.setLengthComputable(true); progress.setTotal(connection.getContentLength()); } } inputStream = getInputStream(connection); } } if (!cached) { try { synchronized (context) { if (context.aborted) { return; } context.connection = connection; } // write bytes to file byte[] buffer = new byte[MAX_BUFFER_SIZE]; int bytesRead = 0; outputStream = resourceApi.openOutputStream(targetUri); while ((bytesRead = inputStream.read(buffer)) > 0) { outputStream.write(buffer, 0, bytesRead); // Send a progress event. progress.setLoaded(inputStream.getTotalRawBytesRead()); PluginResult progressResult = new PluginResult(PluginResult.Status.OK, progress.toJSONObject()); progressResult.setKeepCallback(true); context.sendPluginResult(progressResult); } } finally { synchronized (context) { context.connection = null; } safeClose(inputStream); safeClose(outputStream); } Log.d(LOG_TAG, "Saved file: " + target); // create FileEntry object Class webViewClass = webView.getClass(); PluginManager pm = null; try { Method gpm = webViewClass.getMethod("getPluginManager"); pm = (PluginManager) gpm.invoke(webView); } catch (NoSuchMethodException e) { } catch (IllegalAccessException e) { } catch (InvocationTargetException e) { } if (pm == null) { try { Field pmf = webViewClass.getField("pluginManager"); pm = (PluginManager) pmf.get(webView); } catch (NoSuchFieldException e) { } catch (IllegalAccessException e) { } } file = resourceApi.mapUriToFile(targetUri); context.targetFile = file; FileUtils filePlugin = (FileUtils) pm.getPlugin("File"); if (filePlugin != null) { JSONObject fileEntry = filePlugin.getEntryForFile(file); if (fileEntry != null) { result = new PluginResult(PluginResult.Status.OK, fileEntry); } else { JSONObject error = createFileTransferError(CONNECTION_ERR, source, target, connection, null); Log.e(LOG_TAG, "File plugin cannot represent download path"); result = new PluginResult(PluginResult.Status.IO_EXCEPTION, error); } } else { Log.e(LOG_TAG, "File plugin not found; cannot save downloaded file"); result = new PluginResult(PluginResult.Status.ERROR, "File plugin not found; cannot save downloaded file"); } } } catch (FileNotFoundException e) { JSONObject error = createFileTransferError(FILE_NOT_FOUND_ERR, source, target, connection, e); Log.e(LOG_TAG, error.toString(), e); result = new PluginResult(PluginResult.Status.IO_EXCEPTION, error); } catch (IOException e) { JSONObject error = createFileTransferError(CONNECTION_ERR, source, target, connection, e); Log.e(LOG_TAG, error.toString(), e); result = new PluginResult(PluginResult.Status.IO_EXCEPTION, error); } catch (JSONException e) { Log.e(LOG_TAG, e.getMessage(), e); result = new PluginResult(PluginResult.Status.JSON_EXCEPTION); } catch (Throwable e) { JSONObject error = createFileTransferError(CONNECTION_ERR, source, target, connection, e); Log.e(LOG_TAG, error.toString(), e); result = new PluginResult(PluginResult.Status.IO_EXCEPTION, error); } finally { synchronized (activeRequests) { activeRequests.remove(objectId); } if (connection != null) { // Revert back to the proper verifier and socket factories if (trustEveryone && useHttps) { HttpsURLConnection https = (HttpsURLConnection) connection; https.setHostnameVerifier(oldHostnameVerifier); https.setSSLSocketFactory(oldSocketFactory); } } if (result == null) { result = new PluginResult(PluginResult.Status.ERROR, createFileTransferError(CONNECTION_ERR, source, target, connection, null)); } // Remove incomplete download. if (!cached && result.getStatus() != PluginResult.Status.OK.ordinal() && file != null) { file.delete(); } context.sendPluginResult(result); } } }); }
From source file:at.gv.egovernment.moa.id.proxy.servlet.ProxyServlet.java
/** * Tunnels a request to the online application using given URL mapping and SSLSocketFactory. * This method returns the ResponseCode of the request to the online application. * @param req HTTP request//from w ww . j av a2 s.c o m * @param resp HTTP response * @param loginHeaders header field/values to be inserted for purposes of authentication; * may be <code>null</code> * @param loginParameters parameter name/values to be inserted for purposes of authentication; * may be <code>null</code> * @param publicURLPrefix prefix of request URL to be substituted for the <code>realURLPrefix</code> * @param realURLPrefix prefix of online application URL to substitute the <code>publicURLPrefix</code> * @param ssf SSLSocketFactory to use * @throws IOException if an I/O error occurs */ private int tunnelRequest(HttpServletRequest req, HttpServletResponse resp, Map loginHeaders, Map loginParameters, String publicURLPrefix, String realURLPrefix, SSLSocketFactory ssf, String binding) throws IOException { String originBinding = binding; String browserUserID = ""; String browserPassword = ""; //URL url = new URL(realURLPrefix); //String realURLHost = url.getHost(); if (INTERNAL_DEBUG && !binding.equals("")) Logger.debug("Binding: " + binding); // collect headers from request Map headers = new HashMap(); for (Enumeration enu = req.getHeaderNames(); enu.hasMoreElements();) { String headerKey = (String) enu.nextElement(); String headerKeyValue = req.getHeader(headerKey); if (INTERNAL_DEBUG) Logger.debug("Incoming:" + headerKey + "=" + headerKeyValue); //Analyze Basic-Auth-Headers from the client if (headerKey.equalsIgnoreCase("Authorization")) { if (headerKeyValue.substring(0, 6).equalsIgnoreCase("Basic ")) { String credentials = headerKeyValue.substring(6); byte[] bplaintextcredentials = Base64Utils.decode(credentials, true); String plaintextcredentials = new String(bplaintextcredentials); browserUserID = plaintextcredentials.substring(0, plaintextcredentials.indexOf(":")); browserPassword = plaintextcredentials.substring(plaintextcredentials.indexOf(":") + 1); //deactivate following line for security //if (INTERNAL_DEBUG) Logger.debug("Analyzing authorization-header from browser: " + headerKeyValue + "gives UN:PW=" + browserUserID + ":" + browserPassword ); } if (headerKeyValue.substring(0, 9).equalsIgnoreCase("Negotiate")) { //deactivate following line for security //if (INTERNAL_DEBUG) Logger.debug("Analyzing authorization-header from browser: Found NTLM Aut.: " + headerKeyValue + "gives UN:PW=" + browserUserID + ":" + browserPassword ); } } else { /* Headers MUST NOT be repaced according to our Spec. if (headerKey.equalsIgnoreCase("Host")) { headerKeyValue = realURLHost; //headerKeyValue= realURLPrefix.substring(hoststartpos); if (INTERNAL_DEBUG) Logger.debug("replaced:" + headerKey + "=" + headerKeyValue); } */ headers.put(headerKey, headerKeyValue); } } // collect login headers, possibly overwriting headers from request String authorizationvalue = ""; if (req.getSession().getAttribute(ATT_OA_AUTHORIZATION_HEADER) == null) { if (OAConfiguration.BINDUNG_NOMATCH.equals(binding)) { int loginTry = getLoginTry(req); Logger.debug("Binding: mode = " + OAConfiguration.BINDUNG_NOMATCH + "(try #" + Integer.toString(loginTry) + ")"); if (loginTry == 1) { binding = OAConfiguration.BINDUNG_FULL; } else { binding = OAConfiguration.BINDUNG_USERNAME; } } /* Soll auch bei anderen bindings zuerst ein passwort probiert werden knnen: //if we have the first Login-Try and we have Binding to Username and a predefined Password we try this one first // full binding will be covered by next block if (loginTry==1 && !OAConfiguration.BINDUNG_FULL.equals(binding)) { //1st try: if we have a password, try this one first for (Iterator iter = loginHeaders.keySet().iterator(); iter.hasNext();) { String headerKey = (String) iter.next(); String headerKeyValue = (String) loginHeaders.get(headerKey); if (isBasicAuthenticationHeader(headerKey, headerKeyValue)) { String credentials = headerKeyValue.substring(6); byte [] bplaintextcredentials = Base64Utils.decode(credentials, true); String plaintextcredentials = new String(bplaintextcredentials); String password = plaintextcredentials.substring(plaintextcredentials.indexOf(":")+1); if (password!=null && !password.equals("")) { Logger.debug("Binding: found predefined password. Trying full binding first"); binding = OAConfiguration.BINDUNG_FULL; break; } } } } */ //we have a connection with not having logged on if (loginHeaders != null && (browserPassword.length() != 0 || browserUserID.length() != 0 || OAConfiguration.BINDUNG_FULL.equals(binding))) { for (Iterator iter = loginHeaders.keySet().iterator(); iter.hasNext();) { String headerKey = (String) iter.next(); String headerKeyValue = (String) loginHeaders.get(headerKey); //customize loginheaders if necessary if (isBasicAuthenticationHeader(headerKey, headerKeyValue)) { if (OAConfiguration.BINDUNG_FULL.equals(binding)) { authorizationvalue = headerKeyValue; Logger.debug("Binding: full binding to user established"); } else { String credentials = headerKeyValue.substring(6); byte[] bplaintextcredentials = Base64Utils.decode(credentials, true); String plaintextcredentials = new String(bplaintextcredentials); String userID = plaintextcredentials.substring(0, plaintextcredentials.indexOf(":")); String password = plaintextcredentials.substring(plaintextcredentials.indexOf(":") + 1); String userIDPassword = ":"; if (OAConfiguration.BINDUNG_USERNAME.equals(binding)) { Logger.debug("Binding: Access with necessary binding to user"); userIDPassword = userID + ":" + browserPassword; } else if (OAConfiguration.BINDUNG_NONE.equals(binding)) { Logger.debug("Binding: Access without binding to user"); //If first time if (browserUserID.length() == 0) browserUserID = userID; if (browserPassword.length() == 0) browserPassword = password; userIDPassword = browserUserID + ":" + browserPassword; } else { userIDPassword = userID + ":" + password; } credentials = Base64Utils.encode(userIDPassword.getBytes()); authorizationvalue = "Basic " + credentials; headerKeyValue = authorizationvalue; } } headers.put(headerKey, headerKeyValue); } } } else { //if OA needs Authorization header in each further request authorizationvalue = (String) req.getSession().getAttribute(ATT_OA_AUTHORIZATION_HEADER); if (loginHeaders != null) headers.put("Authorization", authorizationvalue); } Vector parameters = new Vector(); for (Enumeration enu = req.getParameterNames(); enu.hasMoreElements();) { String paramName = (String) enu.nextElement(); if (!(paramName.equals(PARAM_SAMLARTIFACT) || paramName.equals(PARAM_TARGET))) { if (INTERNAL_DEBUG) Logger.debug("Req Parameter-put: " + paramName + ":" + req.getParameter(paramName)); String parameter[] = new String[2]; parameter[0] = paramName; parameter[1] = req.getParameter(paramName); parameters.add(parameter); } } // collect login parameters, possibly overwriting parameters from request if (loginParameters != null) { for (Iterator iter = loginParameters.keySet().iterator(); iter.hasNext();) { String paramName = (String) iter.next(); if (!(paramName.equals(PARAM_SAMLARTIFACT) || paramName.equals(PARAM_TARGET))) { if (INTERNAL_DEBUG) Logger.debug( "Req Login-Parameter-put: " + paramName + ":" + loginParameters.get(paramName)); String parameter[] = new String[2]; parameter[0] = paramName; parameter[1] = (String) loginParameters.get(paramName); parameters.add(parameter); } } } ConnectionBuilder cb = ConnectionBuilderFactory.getConnectionBuilder(publicURLPrefix); HttpURLConnection conn = cb.buildConnection(req, publicURLPrefix, realURLPrefix, ssf, parameters); // set headers as request properties of URLConnection for (Iterator iter = headers.keySet().iterator(); iter.hasNext();) { String headerKey = (String) iter.next(); String headerValue = (String) headers.get(headerKey); String LogStr = "Req header " + headerKey + ": " + headers.get(headerKey); if (isBasicAuthenticationHeader(headerKey, headerValue)) { String credentials = headerValue.substring(6); byte[] bplaintextcredentials = Base64Utils.decode(credentials, true); String plaintextcredentials = new String(bplaintextcredentials); String uid = plaintextcredentials.substring(0, plaintextcredentials.indexOf(":")); String pwd = plaintextcredentials.substring(plaintextcredentials.indexOf(":") + 1); //Sollte AuthorizationInfo vom HTTPClient benutzt werden: cb.addBasicAuthorization(publicURLPrefix, uid, pwd); //deactivate following line for security //if (INTERNAL_DEBUG && Logger.isDebugEnabled()) LogStr = LogStr + " >UserID:Password< >" + uid + ":" + pwd + "<"; } conn.setRequestProperty(headerKey, headerValue); if (INTERNAL_DEBUG) Logger.debug(LogStr); } StringWriter sb = new StringWriter(); // Write out parameters into output stream of URLConnection. // On GET request, do not send parameters in any case, // otherwise HttpURLConnection would send a POST. if (!"get".equalsIgnoreCase(req.getMethod()) && !parameters.isEmpty()) { boolean firstParam = true; String parameter[] = new String[2]; for (Iterator iter = parameters.iterator(); iter.hasNext();) { parameter = (String[]) iter.next(); String paramName = parameter[0]; String paramValue = parameter[1]; if (firstParam) firstParam = false; else sb.write("&"); sb.write(paramName); sb.write("="); sb.write(paramValue); if (INTERNAL_DEBUG) Logger.debug("Req param " + paramName + ": " + paramValue); } } // For WebDAV and POST: copy content if (!"get".equalsIgnoreCase(req.getMethod())) { if (INTERNAL_DEBUG && !"post".equalsIgnoreCase(req.getMethod())) Logger.debug("---- WEBDAV ---- copying content"); try { OutputStream out = conn.getOutputStream(); InputStream in = req.getInputStream(); if (!parameters.isEmpty()) out.write(sb.toString().getBytes()); //Parameter nicht mehr mittels Printwriter schreiben copyStream(in, out, null, req.getMethod()); out.flush(); out.close(); } catch (IOException e) { if (!"post".equalsIgnoreCase(req.getMethod())) Logger.debug("---- WEBDAV ---- streamcopy problem"); else Logger.debug("---- POST ---- streamcopy problem"); } } // connect if (INTERNAL_DEBUG) Logger.debug("Connect Request"); conn.connect(); if (INTERNAL_DEBUG) Logger.debug("Connect Response"); // check login tries if (conn.getResponseCode() == HttpURLConnection.HTTP_UNAUTHORIZED) { int loginTry = getLoginTry(req); req.getSession().setAttribute(ATT_OA_LOGINTRY, Integer.toString(loginTry)); if (loginTry > MAX_OA_LOGINTRY) { Logger.debug("Found 401 UNAUTHORIZED, maximum tries exceeded; leaving..."); cb.disconnect(conn); return -401; } } if (conn.getResponseCode() == HttpURLConnection.HTTP_UNAUTHORIZED && OAConfiguration.BINDUNG_FULL.equals(originBinding)) { Logger.debug("Found 401 UNAUTHORIZED, leaving..."); cb.disconnect(conn); return conn.getResponseCode(); } resp.setStatus(conn.getResponseCode()); //Issue by Gregor Karlinger - content type was annotated twice //resp.setContentType(conn.getContentType()); if (loginHeaders != null && (conn.getResponseCode() == HttpURLConnection.HTTP_OK || conn.getResponseCode() == HttpURLConnection.HTTP_MOVED_TEMP) && req.getSession().getAttribute(ATT_OA_AUTHORIZATION_HEADER) == null) { req.getSession().setAttribute(ATT_OA_AUTHORIZATION_HEADER, authorizationvalue); Logger.debug("Login OK. Saving authorization header to remember in further requests"); } // Read response headers // Omit response header "content-length" if response header "Transfer-encoding: chunked" is set. // Otherwise, the connection will not be kept alive, resulting in subsequent missing requests. // See JavaDoc of javax.servlet.http.HttpServlet: // When using HTTP 1.1 chunked encoding (which means that the response has a Transfer-Encoding header), do not set the Content-Length header. Vector respHeaders = new Vector(); boolean chunked = false; String contentLengthKey = null; String transferEncodingKey = null; int i = 1; String headerKey; String loginType = (String) req.getSession().getAttribute(ATT_OA_LOGINTYPE); while ((headerKey = conn.getHeaderFieldKey(i)) != null) { String headerValue = conn.getHeaderField(i); if (headerKey.equalsIgnoreCase("WWW-Authenticate")) { int start = headerValue.indexOf("Basic realm=\""); boolean requestsBasicAuth = headerValue.substring(start).startsWith("Basic realm=\""); if (requestsBasicAuth) { headerValue = "Basic realm=\"" + publicURLPrefix + "\""; if (OAConfiguration.BINDUNG_USERNAME.equals(originBinding) || OAConfiguration.BINDUNG_NOMATCH.equals(originBinding)) headerValue = "Basic realm=\"Bitte Passwort eingeben\""; else if ("none".equals(originBinding)) { headerValue = "Basic realm=\"Bitte Benutzername und Passwort eingeben\""; } } } // // berschrift im Browser-Passworteingabedialog setzen (sonst ist der reale host eingetragen) // if (headerKey.equalsIgnoreCase("WWW-Authenticate") && headerValue.startsWith("Basic realm=\"")) { // headerValue = "Basic realm=\"" + publicURLPrefix + "\""; // if (OAConfiguration.BINDUNG_USERNAME.equals(originBinding) || OAConfiguration.BINDUNG_NOMATCH.equals(originBinding)) { // headerValue = "Basic realm=\"Bitte Passwort eingeben\""; // } else if (OAConfiguration.BINDUNG_NONE.equals(originBinding)) { // headerValue = "Basic realm=\"Bitte Benutzername und Passwort eingeben\""; // } // } String respHeader[] = new String[2]; if ((conn.getResponseCode() == HttpURLConnection.HTTP_UNAUTHORIZED) && headerKey.equalsIgnoreCase("content-length")) { //alter the unauthorized message with template for login //TODO: supply a special login form on unauthorized messages with bindings!=full headerValue = Integer.toString(RET_401_MSG.length()); } respHeader[0] = headerKey; respHeader[1] = headerValue; if (!(OAConfiguration.BINDUNG_FULL.equals(originBinding) && OAConfiguration.LOGINTYPE_STATELESS.equals(loginType) && headerKey.equalsIgnoreCase("WWW-Authenticate") && headerValue.startsWith("Basic realm=\""))) { respHeaders.add(respHeader); if (INTERNAL_DEBUG) Logger.debug("Resp header " + headerKey + ": " + headerValue); } else { Logger.debug("Resp header ---REMOVED--- " + headerKey + ": " + headerValue); } if (isTransferEncodingChunkedHeader(headerKey, headerValue) || "content-length".equalsIgnoreCase(headerKey)) { respHeaders.remove(respHeader); Logger.debug("Resp header " + headerKey + " REMOVED"); } i++; } String headerValue; String respHeader[] = new String[2]; //write out all Responseheaders for (Iterator iter = respHeaders.iterator(); iter.hasNext();) { respHeader = (String[]) iter.next(); headerKey = respHeader[0]; headerValue = respHeader[1]; resp.addHeader(headerKey, headerValue); } //Logger.debug(">>>> Copy Content"); //Logger.debug(" from ()" + conn.getURL()); //Logger.debug(" to (" + req.getRemoteAddr() + ":"+ ") " +req.getRequestURL()); // read response stream Logger.debug("Resp from " + conn.getURL().toString() + ": status " + conn.getResponseCode()); // Load content unless the server lets us know that the content is NOT MODIFIED... if (conn.getResponseCode() != HttpURLConnection.HTTP_NOT_MODIFIED) { BufferedInputStream respIn = new BufferedInputStream(conn.getInputStream()); //Logger.debug("Got Inputstream"); BufferedOutputStream respOut = new BufferedOutputStream(resp.getOutputStream()); //Logger.debug("Got Outputstream"); byte[] buffer = new byte[4096]; if (respOut != null) { int bytesRead; while ((bytesRead = respIn.read(buffer)) >= 0) { if (conn.getResponseCode() != HttpURLConnection.HTTP_UNAUTHORIZED) respOut.write(buffer, 0, bytesRead); } } else { while (respIn.read(buffer) >= 0) ; } /* int ch; StringBuffer strBuf = new StringBuffer(""); while ((ch = respIn.read()) >= 0) { if (conn.getResponseCode()!=HttpURLConnection.HTTP_UNAUTHORIZED) respOut.write(ch); strBuf.append((char)ch); } Logger.debug("Resp Content:"); if (strBuf.toString().length()>500) Logger.debug(strBuf.toString().substring(0,500)); else Logger.debug(strBuf.toString()); */ if (conn.getResponseCode() == HttpURLConnection.HTTP_UNAUTHORIZED) { respOut.write(RET_401_MSG.getBytes()); } respOut.flush(); respOut.close(); respIn.close(); if (conn.getResponseCode() == HttpURLConnection.HTTP_UNAUTHORIZED) { Logger.debug("Found 401 UNAUTHORIZED..."); cb.disconnect(conn); return conn.getResponseCode(); } } else { //if (conn.getResponseCode()==HttpURLConnection.HTTP_NOT_MODIFIED) Logger.debug("Found 304 NOT MODIFIED..."); } cb.disconnect(conn); Logger.debug("Request done"); return conn.getResponseCode(); }