From 90211cbf81be156a1b47f79578f393070ad9eb66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20M=C3=BCller?= Date: Sun, 26 Jan 2020 22:46:15 +0100 Subject: [PATCH] fix(DownloadManager): try to add cookies to behave similar to other requests --- .../java/com/RNFetchBlob/RNFetchBlobReq.java | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/android/src/main/java/com/RNFetchBlob/RNFetchBlobReq.java b/android/src/main/java/com/RNFetchBlob/RNFetchBlobReq.java index a8abd7183..383065b4a 100644 --- a/android/src/main/java/com/RNFetchBlob/RNFetchBlobReq.java +++ b/android/src/main/java/com/RNFetchBlob/RNFetchBlobReq.java @@ -6,14 +6,15 @@ import android.content.Intent; import android.content.IntentFilter; import android.database.Cursor; -import android.net.Uri; -import android.os.Build; -import androidx.annotation.NonNull; +import android.net.ConnectivityManager; import android.net.Network; -import android.net.NetworkInfo; import android.net.NetworkCapabilities; -import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.net.Uri; +import android.os.Build; import android.util.Base64; +import android.webkit.CookieManager; +import androidx.annotation.NonNull; import com.RNFetchBlob.Response.RNFetchBlobDefaultResp; import com.RNFetchBlob.Response.RNFetchBlobFileResp; @@ -183,15 +184,25 @@ public void run() { if(options.addAndroidDownloads.hasKey("mime")) { req.setMimeType(options.addAndroidDownloads.getString("mime")); } - // set headers - ReadableMapKeySetIterator it = headers.keySetIterator(); if(options.addAndroidDownloads.hasKey("mediaScannable") && options.addAndroidDownloads.hasKey("mediaScannable")) { req.allowScanningByMediaScanner(); } + // set headers + ReadableMapKeySetIterator it = headers.keySetIterator(); while (it.hasNextKey()) { String key = it.nextKey(); req.addRequestHeader(key, headers.getString(key)); } + // Attempt to add cookie, if it exists + URL urlObj = null; + try { + urlObj = new URL(url); + String baseUrl = urlObj.getProtocol() + "://" + urlObj.getHost(); + String cookie = CookieManager.getInstance().getCookie(baseUrl); + req.addRequestHeader("Cookie", cookie); + } catch (MalformedURLException e) { + e.printStackTrace(); + } Context appCtx = RNFetchBlob.RCTContext.getApplicationContext(); DownloadManager dm = (DownloadManager) appCtx.getSystemService(Context.DOWNLOAD_SERVICE); downloadManagerId = dm.enqueue(req); @@ -565,7 +576,7 @@ private void done(Response resp) { // This usually mean the data is contains invalid unicode characters but still valid data, // it's binary data, so send it as a normal string catch(CharacterCodingException ignored) { - + if(responseFormat == ResponseFormat.UTF8) { String utf8 = new String(b); callback.invoke(null, RNFetchBlobConst.RNFB_RESPONSE_UTF8, utf8);