diff options
author | Martin Fietz <Martin.Fietz@gmail.com> | 2015-12-04 10:05:09 +0100 |
---|---|---|
committer | Martin Fietz <Martin.Fietz@gmail.com> | 2015-12-04 10:40:25 +0100 |
commit | 155966060902802c1324ba4bf2294e5877caf18b (patch) | |
tree | 8b9a2eed6108bbebf7863082ad38b591f8278eb3 | |
parent | e460c817e0ce9d1c8c88f13c717b8b10202008bc (diff) | |
download | AntennaPod-155966060902802c1324ba4bf2294e5877caf18b.zip |
Handle redirects with relative URL correctly
-rw-r--r-- | core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java | 12 |
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) { |