|
|
@@ -4,6 +4,9 @@
|
|
|
|
|
|
package com.ntels.onecable.common.http;
|
|
|
|
|
|
+import com.facebook.stetho.urlconnection.ByteArrayRequestEntity;
|
|
|
+import com.facebook.stetho.urlconnection.SimpleRequestEntity;
|
|
|
+import com.facebook.stetho.urlconnection.StethoURLConnectionManager;
|
|
|
import com.ntels.onecable.common.AppConfig;
|
|
|
import com.ntels.onecable.common.Constants;
|
|
|
import com.ntels.onecable.common.c_interface.OnTaskExecutionFinished;
|
|
|
@@ -14,11 +17,13 @@ import com.ntels.onecable.common.util.Util;
|
|
|
|
|
|
import android.content.Context;
|
|
|
import android.os.AsyncTask;
|
|
|
+import android.support.annotation.Nullable;
|
|
|
import android.webkit.CookieManager;
|
|
|
|
|
|
import java.io.File;
|
|
|
import java.io.FileInputStream;
|
|
|
import java.io.IOException;
|
|
|
+import java.io.InputStream;
|
|
|
import java.io.OutputStream;
|
|
|
import java.io.OutputStreamWriter;
|
|
|
import java.io.PrintWriter;
|
|
|
@@ -28,6 +33,7 @@ import java.net.URL;
|
|
|
import java.net.URLConnection;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.zip.GZIPInputStream;
|
|
|
|
|
|
import javax.net.ssl.HostnameVerifier;
|
|
|
import javax.net.ssl.HttpsURLConnection;
|
|
|
@@ -50,6 +56,9 @@ public class HttpTask extends AsyncTask<CustomRequest, Integer, Response[]> {
|
|
|
|
|
|
private static final String TAG = HttpTask.class.getSimpleName();
|
|
|
|
|
|
+ private static final String HEADER_ACCEPT_ENCODING = "Accept-Encoding";
|
|
|
+ private static final String GZIP_ENCODING = "gzip";
|
|
|
+
|
|
|
protected Context context;
|
|
|
|
|
|
private OnTaskExecutionFinished _task_finished_event;
|
|
|
@@ -59,9 +68,10 @@ public class HttpTask extends AsyncTask<CustomRequest, Integer, Response[]> {
|
|
|
private String delimiter = "--";
|
|
|
private String sTempCookies = "";
|
|
|
String charset = "UTF-8";
|
|
|
+ private final StethoURLConnectionManager mStethoURLConnectionManager;
|
|
|
|
|
|
public HttpTask() {
|
|
|
-
|
|
|
+ this.mStethoURLConnectionManager = new StethoURLConnectionManager(null);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -84,6 +94,7 @@ public class HttpTask extends AsyncTask<CustomRequest, Integer, Response[]> {
|
|
|
public HttpTask(Context context) {
|
|
|
|
|
|
this.context = context;
|
|
|
+ this.mStethoURLConnectionManager = new StethoURLConnectionManager(null);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -185,6 +196,9 @@ public class HttpTask extends AsyncTask<CustomRequest, Integer, Response[]> {
|
|
|
httpConn.setInstanceFollowRedirects(true);
|
|
|
// httpConn.setRequestProperty("cookie", sTempCookies);
|
|
|
httpConn.setAllowUserInteraction(false);
|
|
|
+
|
|
|
+ requestDecompression(httpConn);
|
|
|
+
|
|
|
if (customRequest.getHttpMethod().equals(CustomRequest.HTTP_METHOD_MULTIPART)) {
|
|
|
httpConn.setRequestMethod(CustomRequest.HTTP_METHOD_POST);
|
|
|
} else {
|
|
|
@@ -220,6 +234,18 @@ public class HttpTask extends AsyncTask<CustomRequest, Integer, Response[]> {
|
|
|
|
|
|
Dlog.v("jino4444");
|
|
|
|
|
|
+ SimpleRequestEntity requestEntity = null;
|
|
|
+ if (!mUtil.null2string(customRequest.getBodyStr()).equals("")) {
|
|
|
+ Dlog.v("customRequest.getBodyStr().toString() = " + customRequest.getBodyStr().toString());
|
|
|
+// os.write(customRequest.getBodyStr().getBytes());
|
|
|
+ requestEntity = new ByteArrayRequestEntity(customRequest.getBodyStr().getBytes());
|
|
|
+ } else if (!mUtil.null2string(customRequest.getBody()).equals("")) {
|
|
|
+ Dlog.v("mUtil.convPostBodyJson(request.getBody()).toString()= " + mUtil.convPostBodyJson(customRequest.getBody()).toString());
|
|
|
+// os.write(mUtil.convPostBodyJson(customRequest.getBody()).toString().getBytes());
|
|
|
+ requestEntity = new ByteArrayRequestEntity(mUtil.convPostBodyJson(customRequest.getBody()).toString().getBytes());
|
|
|
+ }
|
|
|
+ mStethoURLConnectionManager.preConnect(httpConn, requestEntity);
|
|
|
+
|
|
|
if (customRequest.getHttpMethod().equals(CustomRequest.HTTP_METHOD_MULTIPART)) {
|
|
|
httpConn.setUseCaches(false);
|
|
|
httpConn.setDoOutput(true);
|
|
|
@@ -255,20 +281,27 @@ public class HttpTask extends AsyncTask<CustomRequest, Integer, Response[]> {
|
|
|
|
|
|
OutputStream os = httpConn.getOutputStream();
|
|
|
|
|
|
- if (!mUtil.null2string(customRequest.getBodyStr()).equals("")) {
|
|
|
+ /*if (!mUtil.null2string(customRequest.getBodyStr()).equals("")) {
|
|
|
Dlog.v("customRequest.getBodyStr().toString() = " + customRequest.getBodyStr().toString());
|
|
|
- os.write(customRequest.getBodyStr().getBytes());
|
|
|
+// os.write(customRequest.getBodyStr().getBytes());
|
|
|
+ requestEntity = new ByteArrayRequestEntity(customRequest.getBodyStr().getBytes());
|
|
|
} else {
|
|
|
Dlog.v("mUtil.convPostBodyJson(request.getBody()).toString()= " + mUtil.convPostBodyJson(customRequest.getBody()).toString());
|
|
|
- os.write(mUtil.convPostBodyJson(customRequest.getBody()).toString().getBytes());
|
|
|
- }
|
|
|
+// os.write(mUtil.convPostBodyJson(customRequest.getBody()).toString().getBytes());
|
|
|
+ requestEntity = new ByteArrayRequestEntity(mUtil.convPostBodyJson(customRequest.getBody()).toString().getBytes());
|
|
|
+ }*/
|
|
|
+ requestEntity.writeTo(os);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ mStethoURLConnectionManager.postConnect();
|
|
|
|
|
|
String content = "";
|
|
|
+ InputStream rawStream = httpConn.getInputStream();
|
|
|
try {
|
|
|
- content = ResponseHelper.read(httpConn.getInputStream());
|
|
|
+ rawStream = mStethoURLConnectionManager.interpretResponseStream(rawStream);
|
|
|
+ InputStream decompressedStream = applyDecompressionIfApplicable(httpConn, rawStream);
|
|
|
+ content = ResponseHelper.read(decompressedStream);
|
|
|
} catch (IOException e1) {
|
|
|
content = ResponseHelper.read(httpConn.getErrorStream());
|
|
|
}
|
|
|
@@ -280,6 +313,7 @@ public class HttpTask extends AsyncTask<CustomRequest, Integer, Response[]> {
|
|
|
retval = new Response(httpConn.getResponseCode(), httpConn.getResponseMessage(), content);
|
|
|
} catch (IOException e) {
|
|
|
e.printStackTrace();
|
|
|
+ mStethoURLConnectionManager.httpExchangeFailed(e);
|
|
|
try {
|
|
|
CookieManager.getInstance().setCookie(url.toString(), sTempCookies);
|
|
|
retval = new Response(httpConn.getResponseCode(), httpConn.getResponseMessage(), "");
|
|
|
@@ -297,6 +331,19 @@ public class HttpTask extends AsyncTask<CustomRequest, Integer, Response[]> {
|
|
|
return retval;
|
|
|
}
|
|
|
|
|
|
+ private static void requestDecompression(HttpURLConnection conn) {
|
|
|
+ conn.setRequestProperty(HEADER_ACCEPT_ENCODING, GZIP_ENCODING);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Nullable
|
|
|
+ private static InputStream applyDecompressionIfApplicable(
|
|
|
+ HttpURLConnection conn, @Nullable InputStream in) throws IOException {
|
|
|
+ if (in != null && GZIP_ENCODING.equals(conn.getContentEncoding())) {
|
|
|
+ return new GZIPInputStream(in);
|
|
|
+ }
|
|
|
+ return in;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* HTTP header property 추가.
|
|
|
*
|