summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Fietz <Martin.Fietz@gmail.com>2015-12-04 10:05:09 +0100
committerMartin Fietz <Martin.Fietz@gmail.com>2015-12-04 10:40:25 +0100
commit155966060902802c1324ba4bf2294e5877caf18b (patch)
tree8b9a2eed6108bbebf7863082ad38b591f8278eb3
parente460c817e0ce9d1c8c88f13c717b8b10202008bc (diff)
downloadAntennaPod-155966060902802c1324ba4bf2294e5877caf18b.zip
Handle redirects with relative URL correctly
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java12
1 files changed, 12 insertions, 0 deletions
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java
index 0e79fbf7b..ed74e0fb6 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java
@@ -15,6 +15,7 @@ import java.net.CookiePolicy;
import java.net.HttpURLConnection;
import java.net.InetAddress;
import java.net.Socket;
+import java.net.URL;
import java.security.GeneralSecurityException;
import java.util.concurrent.TimeUnit;
@@ -71,6 +72,17 @@ public class AntennapodHttpClient {
if(response.code() == HttpURLConnection.HTTP_MOVED_PERM ||
response.code() == StatusLine.HTTP_PERM_REDIRECT) {
String location = response.header("Location");
+ if(location.startsWith("/")) { // URL is not absolute, but relative
+ URL url = request.url();
+ location = url.getProtocol() + "://" + url.getHost() + location;
+ } else if(!location.startsWith("http://") && !location.startsWith("https://")) {
+ // Reference is relative to current path
+ URL url = request.url();
+ String path = url.getPath();
+ String newPath = path.substring(0, path.lastIndexOf("/") + 1) + location;
+ location = url.getProtocol() + "://" + url.getHost() + newPath;
+ }
+ Log.d(TAG, "New location: " + location);
try {
DBWriter.updateFeedDownloadURL(request.urlString(), location).get();
} catch (Exception e) {