Don't encode already encoded URLs. fixes #376
This commit is contained in:
parent
361e56385b
commit
b454ab0974
@ -7,6 +7,7 @@ import de.danoeh.antennapod.PodcastApp;
|
|||||||
import de.danoeh.antennapod.R;
|
import de.danoeh.antennapod.R;
|
||||||
import de.danoeh.antennapod.util.DownloadError;
|
import de.danoeh.antennapod.util.DownloadError;
|
||||||
import de.danoeh.antennapod.util.StorageUtils;
|
import de.danoeh.antennapod.util.StorageUtils;
|
||||||
|
import de.danoeh.antennapod.util.URIUtil;
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.http.Header;
|
import org.apache.http.Header;
|
||||||
@ -29,24 +30,13 @@ public class HttpDownloader extends Downloader {
|
|||||||
super(request);
|
super(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
private URI getURIFromRequestUrl(String source) {
|
|
||||||
try {
|
|
||||||
URL url = new URL(source);
|
|
||||||
return new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
|
|
||||||
} catch (MalformedURLException e) {
|
|
||||||
throw new IllegalArgumentException(e);
|
|
||||||
} catch (URISyntaxException e) {
|
|
||||||
throw new IllegalArgumentException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void download() {
|
protected void download() {
|
||||||
HttpClient httpClient = AntennapodHttpClient.getHttpClient();
|
HttpClient httpClient = AntennapodHttpClient.getHttpClient();
|
||||||
BufferedOutputStream out = null;
|
BufferedOutputStream out = null;
|
||||||
InputStream connection = null;
|
InputStream connection = null;
|
||||||
try {
|
try {
|
||||||
HttpGet httpGet = new HttpGet(getURIFromRequestUrl(request.getSource()));
|
HttpGet httpGet = new HttpGet(URIUtil.getURIFromRequestUrl(request.getSource()));
|
||||||
String userInfo = httpGet.getURI().getUserInfo();
|
String userInfo = httpGet.getURI().getUserInfo();
|
||||||
if (userInfo != null) {
|
if (userInfo != null) {
|
||||||
String[] parts = userInfo.split(":");
|
String[] parts = userInfo.split(":");
|
||||||
|
35
src/de/danoeh/antennapod/util/URIUtil.java
Normal file
35
src/de/danoeh/antennapod/util/URIUtil.java
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
package de.danoeh.antennapod.util;
|
||||||
|
|
||||||
|
import android.util.Log;
|
||||||
|
import de.danoeh.antennapod.AppConfig;
|
||||||
|
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.URI;
|
||||||
|
import java.net.URISyntaxException;
|
||||||
|
import java.net.URL;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utility methods for dealing with URL encoding.
|
||||||
|
*/
|
||||||
|
public class URIUtil {
|
||||||
|
private static final String TAG = "URIUtil";
|
||||||
|
|
||||||
|
private URIUtil() {}
|
||||||
|
|
||||||
|
public static URI getURIFromRequestUrl(String source) {
|
||||||
|
// try without encoding the URI
|
||||||
|
try {
|
||||||
|
return new URI(source);
|
||||||
|
} catch (URISyntaxException e) {
|
||||||
|
if (AppConfig.DEBUG) Log.d(TAG, "Source is not encoded, encoding now");
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
URL url = new URL(source);
|
||||||
|
return new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
|
||||||
|
} catch (MalformedURLException e) {
|
||||||
|
throw new IllegalArgumentException(e);
|
||||||
|
} catch (URISyntaxException e) {
|
||||||
|
throw new IllegalArgumentException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
package instrumentationTest.de.test.antennapod.util;
|
||||||
|
|
||||||
|
import android.test.AndroidTestCase;
|
||||||
|
import de.danoeh.antennapod.util.URIUtil;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test class for URIUtil
|
||||||
|
*/
|
||||||
|
public class URIUtilTest extends AndroidTestCase {
|
||||||
|
|
||||||
|
public void testGetURIFromRequestUrlShouldNotEncode() {
|
||||||
|
final String testUrl = "http://example.com/this%20is%20encoded";
|
||||||
|
assertEquals(testUrl, URIUtil.getURIFromRequestUrl(testUrl).toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetURIFromRequestUrlShouldEncode() {
|
||||||
|
final String testUrl = "http://example.com/this is not encoded";
|
||||||
|
final String expected = "http://example.com/this%20is%20not%20encoded";
|
||||||
|
assertEquals(expected, URIUtil.getURIFromRequestUrl(testUrl).toString());
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user