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.util.DownloadError;
|
||||
import de.danoeh.antennapod.util.StorageUtils;
|
||||
import de.danoeh.antennapod.util.URIUtil;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.http.Header;
|
||||
|
@ -29,24 +30,13 @@ public class HttpDownloader extends Downloader {
|
|||
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
|
||||
protected void download() {
|
||||
HttpClient httpClient = AntennapodHttpClient.getHttpClient();
|
||||
BufferedOutputStream out = null;
|
||||
InputStream connection = null;
|
||||
try {
|
||||
HttpGet httpGet = new HttpGet(getURIFromRequestUrl(request.getSource()));
|
||||
HttpGet httpGet = new HttpGet(URIUtil.getURIFromRequestUrl(request.getSource()));
|
||||
String userInfo = httpGet.getURI().getUserInfo();
|
||||
if (userInfo != null) {
|
||||
String[] parts = userInfo.split(":");
|
||||
|
|
|
@ -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…
Reference in New Issue