aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/network/Network.java
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/cgeo/geocaching/network/Network.java')
-rw-r--r--main/src/cgeo/geocaching/network/Network.java52
1 files changed, 47 insertions, 5 deletions
diff --git a/main/src/cgeo/geocaching/network/Network.java b/main/src/cgeo/geocaching/network/Network.java
index 72b325e..c3265fe 100644
--- a/main/src/cgeo/geocaching/network/Network.java
+++ b/main/src/cgeo/geocaching/network/Network.java
@@ -22,6 +22,7 @@ import ch.boye.httpclientandroidlib.client.methods.HttpGet;
import ch.boye.httpclientandroidlib.client.methods.HttpPost;
import ch.boye.httpclientandroidlib.client.methods.HttpRequestBase;
import ch.boye.httpclientandroidlib.client.params.ClientPNames;
+import ch.boye.httpclientandroidlib.entity.StringEntity;
import ch.boye.httpclientandroidlib.entity.mime.MultipartEntity;
import ch.boye.httpclientandroidlib.entity.mime.content.FileBody;
import ch.boye.httpclientandroidlib.entity.mime.content.StringBody;
@@ -34,6 +35,7 @@ import ch.boye.httpclientandroidlib.params.HttpParams;
import ch.boye.httpclientandroidlib.protocol.HttpContext;
import ch.boye.httpclientandroidlib.util.EntityUtils;
+import org.apache.commons.lang3.CharEncoding;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONException;
import org.json.JSONObject;
@@ -43,11 +45,13 @@ import android.net.Uri;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
import java.net.URLEncoder;
public abstract class Network {
private static final int NB_DOWNLOAD_RETRIES = 4;
+
/** User agent id */
private final static String PC_USER_AGENT = "Mozilla/5.0 (X11; Linux x86_64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1";
/** Native user agent, taken from a Android 2.2 Nexus **/
@@ -58,7 +62,7 @@ public abstract class Network {
private final static HttpParams clientParams = new BasicHttpParams();
static {
- Network.clientParams.setParameter(CoreProtocolPNames.HTTP_CONTENT_CHARSET, "UTF-8");
+ Network.clientParams.setParameter(CoreProtocolPNames.HTTP_CONTENT_CHARSET, CharEncoding.UTF_8);
Network.clientParams.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 30000);
Network.clientParams.setParameter(CoreConnectionPNames.SO_TIMEOUT, 30000);
Network.clientParams.setParameter(ClientPNames.HANDLE_REDIRECTS, true);
@@ -115,7 +119,6 @@ public abstract class Network {
if (contentEncoding != null) {
for (final HeaderElement codec : contentEncoding.getElements()) {
if (codec.getName().equalsIgnoreCase("gzip")) {
- Log.d("Decompressing response");
response.setEntity(new GzipDecompressingEntity(response.getEntity()));
return;
}
@@ -153,6 +156,27 @@ public abstract class Network {
}
/**
+ * POST HTTP request with Json POST DATA
+ *
+ * @param uri the URI to request
+ * @param json the json object to add to the POST request
+ * @return the HTTP response, or null in case of an encoding error params
+ */
+ public static HttpResponse postJsonRequest(final String uri, final JSONObject json) {
+ HttpPost request = new HttpPost(uri);
+ request.addHeader("Content-Type", "application/json; charset=utf-8");
+ if (json != null) {
+ try {
+ request.setEntity(new StringEntity(json.toString()));
+ } catch (UnsupportedEncodingException e) {
+ Log.e("postJsonRequest:JSON Entity: UnsupportedEncodingException");
+ return null;
+ }
+ }
+ return doRepeatedRequests(request);
+ }
+
+ /**
* Multipart POST HTTP request
*
* @param uri the URI to request
@@ -206,7 +230,7 @@ public abstract class Network {
request = new HttpPost(uri);
if (params != null) {
try {
- ((HttpPost) request).setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
+ ((HttpPost) request).setEntity(new UrlEncodedFormEntity(params, CharEncoding.UTF_8));
} catch (final UnsupportedEncodingException e) {
Log.e("request", e);
return null;
@@ -377,7 +401,7 @@ public abstract class Network {
private static String getResponseDataNoError(final HttpResponse response, boolean replaceWhitespace) {
try {
- String data = EntityUtils.toString(response.getEntity(), "UTF-8");
+ String data = EntityUtils.toString(response.getEntity(), CharEncoding.UTF_8);
return replaceWhitespace ? BaseUtils.replaceWhitespace(data) : data;
} catch (Exception e) {
Log.e("getResponseData", e);
@@ -397,7 +421,25 @@ public abstract class Network {
}
public static String rfc3986URLEncode(String text) {
- return StringUtils.replace(URLEncoder.encode(text).replace("+", "%20"), "%7E", "~");
+ return StringUtils.replace(Network.encode(text).replace("+", "%20"), "%7E", "~");
+ }
+
+ public static String decode(final String text) {
+ try {
+ return URLDecoder.decode(text, CharEncoding.UTF_8);
+ } catch (UnsupportedEncodingException e) {
+ Log.e("Network.decode", e);
+ }
+ return null;
+ }
+
+ public static String encode(final String text) {
+ try {
+ return URLEncoder.encode(text, CharEncoding.UTF_8);
+ } catch (UnsupportedEncodingException e) {
+ Log.e("Network.encode", e);
+ }
+ return null;
}
}